トップページ⇒tech
43コメント20KB

文字連結#C言語

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。 NGNG
int 型の宣言で取得した数字を。
char 型に変えて、続けて格納していきたいんですがどうすればよいんでしょう?
int a;
char f;
1回目 a=2
fの中身は2
2回目 a=4
fの中身は24
3回目 a=7
fの中身は247
4回目 a=3
fの中身は2473
・・・
とこのようにしたいんです。

strcat関数などを使おうとしましたが。int型は怒られます。
それで、int型をいったんchar型の宣言bに b=aと使用とすると
やはりエラーが生じます。
int型のchar変換を、初歩的な質問かもしれませんが教えてください。
0002Visual 名無しさん NGNG
charは文字列型じゃな〜ぁい……

int a;
char f[100]={0};

//1回目
a=2;
sprintf( f@`"%s%d"@`f@`a );
//2回目
a=4;
sprintf( f@`"%s%d"@`f@`a );
//3回目
a=7;
sprintf( f@`"%s%d"@`f@`a );
//4回目
a=3;
sprintf( f@`"%s%d"@`f@`a );
00032 NGNG
あ、やっぱ↑それダメだ。取り消し。
0004名無しさん@お腹いっぱい。 NGNG
うう、3流プログラマは以下のようになった・・
ガード等はしてないよ

int a@`j@`offs ;
char f[100] = { 0 } ; // 100は適当

offs = 0 ;
for(j=0; ??? ; j++) {
scanf("%d"@`&a) ;
sprintf(&f[offs]@`"%d"@`a) ;
offs = strlen(f) ;
}

>>1
たぶん、単に配列概念がわかってないだけでわ?
0005名無しさん@お腹いっぱい。 NGNG
>4
ありがとうございます!!。
目からウロコです。
sprintfという便利なものがあったんですね。
感謝、

#include<stdio.h>

main(){
int a@`j@`offs;
char f[100]={0};

offs=0;
for(j=0; j<=10; j++){
scanf("%d"@`&a);
sprintf(&f[offs]@`"%d"@`a);
offs=strlen(f);
}
printf("%s"@`f);
}
00064 NGNG
よけいなお世話かもしれないけど、
勉強の為なら、sprintf()の部分くらい自分で作ってみると
さらに理解度が深まるような気がする。
0007名無しさん@お腹いっぱい。 NGNG
ハァ? >4,5
なんか最初の質問の内容と趣旨が全然違うんだが‥?
いったい何が死体わけ?
0008名無しさん@お腹いっぱい。 NGNG
>7
よくわかってない人が質問するとこうなります。
00094 NGNG
>7
 で、こっちである程度予測して回答しても別にいいじゃん。
0010名無しさん@お腹いっぱい。 NGNG
>>7
「なにがしたいわけ?」って。
1の趣旨は、数値を文字列に変換して連結したいってことでしょ?
0011名無しさん@お腹いっぱい。 NGNG
なるへそ、投機実行ってわけね。
高度な技術やなぁ‥なっとく‥
0012名無しさん@お腹いっぱい。 NGNG
>>11
こういうスレで、「質問ができてない」って所からはじめると、
質問した人間はたいてい逃げます。
0013名無しさん@お腹いっぱい。 NGNG
さすが隔離板だね。>>1-6
0014名無しさん@お腹いっぱい。 NGNG
>>13
先生、模範回答お願いします。
001513 NGNG
入力されるのが、0以上9以下と約束されているのなら、

#include<stdio.h>
#define MAX 100

void main(void)
{
int a=0@`i;

char f[MAX]@` *p;

p = f;
i = 0;
while( i++ < MAX ){
printf("a = ? (999 で終了) : ");
scanf("%d"@`&a);

if( a == 999 ) break;

*p++ = '0'+a;
}
*p = '\0';
printf("Result : %s"@`f);
}
0016名無しさん@お腹いっぱい。 NGNG
>>15 (ニセ13)
隔離板に相応しい、御迷答ですな。
0017名無しさん@お腹いっぱい。 NGNG
>>16
先生、模範回答お願いします。
001816(ニセ13) NGNG
int型の範囲(-32768〜32767)をカバーできるようにしてみました。

#include<stdio.h>
#include<string.h>

void main(void)
{
int a@` i@` j@` count=1@` flag=0;

char f[256]@` temp[10]@` w;

while( 1 ){
printf("%d回目 a = "@`count++);
scanf("%d"@`&a);

if( a < 0 ){
flag = -1;
a = -a;
}

i = 0;
do{
temp[i++] = a%10 + '0' ;
a /= 10;
}while( a > 0 );
if( flag == -1 )
temp[i++] = '-' ;
temp[i] = '\0' ;
i--;
j = 0;

while( i>j ){
w = temp[i];
temp[i] = temp[j];
temp[j] = w;
i--;
j++;
}
strcat( f@` temp );
printf("fの中身は : %s\n"@`f);
flag = 0;
}
}

>>16
先ほどのソースに不備がありましたでしょうか?
0019ニセ13 NGNG
-32768は無理か・・・

ブレイク方法は使用者まかせだけど、1さんがやりたかったのは
こういうのじゃないのかなぁ。
0020名無しさん@お腹いっぱい。 NGNG
sprintf(f@` "%d"@` a);
00214 NGNG
>>18 >>19
なるほど。まぁそうなんでしょう。
これを実行すると、1さんの書いたとーりにゃなりますな。

ところで、わざわざsprintfを解体したんだから、
strcatも解体すればかっちょええのでわ?
#つーか、最後にtempバッファで入れ替えする必要ないよぉな・・・

 話しは変わりますが、
 intって16ビットなんですか?
 今時、ILP32 で考えるのが普通かと思ってました。
 それはやめとけ?ですかね?
002213 NGNG
まだ、解決してないのかあまりにあほ臭いので、つくってやったぞ。
即席で作ったから、正しいという保証はできないが。

char *strcat_i2a(char *des@` int x)
{
  char work[24]@` *p; /* \log_10 2^{64} = 19.2... */
  int negative;

  negative = x < 0 ? x= -x : 0;
  for(p = work+sizeof(work)@` *--p = '\0'; x!=0;x/=10) *--p = '0'+x%10;
  if(negative) *--p = '-';
  return strcat(des@` p);
}
0023名無しさん@お腹いっぱい。 NGNG
マジでよくわからんのだが、こぞって車輪の再発明を行なっている理由は何?
0024ニセ13>4 NGNG
>strcatも解体すればかっちょええのでわ?

単純だからまぁいいか、と思ったんですが。
char *strcat( char *s1@` char *s2 )
{
char *p = s1;
while( *p ) p++;
while( *p++ = *s2++ );
return s1;
}

>#つーか、最後にtempバッファで入れ替えする必要ないよぉな・・・

iとj使って、配列tempの前後を入れ替えてる作業のことですよね?
aに「-123」と入力すると、tempには「321-」と格納してますから、
最後に入れ替えたんですが。

>intって16ビットなんですか?

2バイトのシステムもありますし、4バイトのシステムもありますね。
これ以外のサイズのintは見たことないんですが、あるのかな?
0025ニセ13 NGNG
>4

失礼。「intが2バイトっていうのは古い」という意味でおっしゃってたんですね。
”ILP32”って単語の意味がわからなかったんで、
検索してみたらintは4バイトってなってますね。
自分のパソコンでのことしか事しか考えていませんでした。
もっと視野を広げないとダメですね。

>23

上級者さんには退屈だとおもうんですが、
私のような初心者には調度いい問題ですよ(^^

00264 NGNG
>>24 >>25
 あ、言葉足らずでごめんなさい。
 tempバッファでひっくり返さなくても
 直接fに書きこめばいいかな。と思ったのです。

 ちなみにNECのACOS6とかだと、int36ビットというのもありました。
 8進数はつらかった。

>>23
 暇つぶしにゃ、いいかと思うんですが。
 べつに再度やってはならない理由はないかと。
 
002723 NGNG
いや、自分で遊ぶ分には結構だが、1のような初心者に教えるようなケースでは
適切とは言えないと思うのだよ。車輪の再発明は、決して褒められたこと
ではないからな。
ただでさえ初心者は車輪の再発明をしがちなのだから、適切なライブラリ関数
の存在と使用方法を教えるのが正しいやり方じゃないか?
0028名無しさん@お腹いっぱい。 NGNG
学生だったら、最初の頃はライブラリ関数の仕様理解を兼ねて、
車輪の再発明もわるくはないかと。
大学の学生実験なんか、みんな車輪の再発明じゃん。
手を動かすと、理解が進むからね。

仕事でこれをやられたらたまらんけどね。
でも、頭悪すぎ。>ニセ13 & 1
0029名無しさん@お腹いっぱい。 NGNG
とほほ。学生実験は追試の一種だろうよ。
いわんとすることはわかるが、車輪の再発明ってのは
ライブラリ関数の存在を知らずに八角形の車輪を作ったりする
ことだろ。
00304 NGNG
>>29
車輪の再発明 = 八角形の車輪を作ったりする
ってわけではないでしょう?
大抵そうなる。っつーだけで。
八角形だろうか、三角形になろうが、重要なのは
それを丸くする努力であって、
最初から工場のラインに頼むのはどうかな。と思うけど。


また、firmな世界から言うと、標準ライブラリに溺れた学生は
使えないです。
確かに、的確なライブラリの存在や習得も重要ですけどね。

#まー私的には、なんでもいいけど、2chなんて暇つぶしなんだから
#どーだっていいじゃん。と思うが。
003129 NGNG
「車輪の再発明 = 八角形の車輪を作る」じゃなくて
「車輪の再発明 = 八角形の車輪を作ったりする」ってこと。
出来合いのそこそこ丸い汎用的な車輪があるのに、
それを知らずに再発明するのはヴァカのすることだ。

たまに張り切ったヴァカが24角形くらいに削り磨くことは
あるが、それはどうしようもなく無駄な努力。

追試と再発明は別物なんだけど、そこんとこわかってる?
で、追試も再発明さえもしたことない学生がスカだっただけでしょ。
00324 NGNG
プログラムするのに、無駄な努力っていらないんだー。
俺、初めて知った。
というか、プログラムって無駄な努力の上に成り立っているもの。
という認識でいままでいたが。

そこまで頑なに排除しなくてもいいよーに思うな。
0033名無しさん@お腹いっぱい。 NGNG
「車輪の再発明」を繰り返してる奴、よほどの天才だな。
そうでなければ、ばかじゃねーの?
strncpyを自分で「使う」ために作ってる訳ね―じゃん。
勉強と理解のためにやってるんだろうに。

それを否定する人間は、「画面にHello World.と表示するプログラム」や
「ウィンドウを表示するだけのプログラム」なんて作った事無いんだろうな。
すげえすげえ。
003433 NGNG
こいつは教科書の英語を訳すときも
「既に訳されているので私が行う必要はありません」
数学の証明問題も
「既に証明されているので私が行う必要はありません」
と答えていたんだろうな。
よく高校を卒業できたもんだ。
003523 NGNG
>>33
↓のことなら、俺じゃないぞ。
まあ、どうでもいいことだがな。
http://piza.2ch.net/test/read.cgi?bbs=tech&key=972032579&st=93&to=93&nofirst=true

003633 NGNG
スマン。俺も熱くなりすぎた。
が、このスレに書いてる奴も「(1を課題とみなして)自分ならこう考える」と
いう考えた結果を書きこんでるんだと思うぞ。
だとすれば、周りで見ている奴(含俺)には無意味でも、
当人にとっては充分に意味があるはず。
003723 NGNG
まあ、俺の考えは大体27に述べた通りなんだが、29や「お姉さん」スレッド
に書き込んだ奴ほどは「過激派」ではないつもりだ。
ていうか、「お姉さん」スレッドの奴は、文体から言って明らかに厨房なんだから
あまり気にするな。

まあ、正直確かに口を挟む程のことでは無かったという気はするよ。多分
> 当人にとっては充分に意味がある
遊びが、当初の1の質問をちょっとないがしろにした形で進んでいるような
気がしてちょいと気になっただけだ。
sprintfを初めて知った初心者に教えることか?とね。
0038名無しさん@お腹いっぱい。 NGNG
>37
スレなんか立てないで入門書で自習するのがよろし。>初心者

0039ななし NGNG
>23@`33
両名ともいったい何をなれあってるの?もっと熱くなれ〜。

>23 (>>37)
"sprintfを初めて知った初心者に教えることか?とね。 "
質問のしかたも悪ければ、本人の努力も足りないわけだし、
わざわざ親切に1の望む答えを出してやる必要もないと思うけどね。

>33 (>>36)
"周りで見ている奴(含俺)には無意味でも当人にとっては充分に意味があるはず。"
家でオナニーするのは十分本人には意味があるが、
他人がみても気持ちのいいものだとは思えないがどうだい?

車輪の再発明するのは、学習過程においては有意義だと思うが、
ダメコードをだらだらと掲示板に流すのは止めて欲しいな。
醜い上に、情報量が少ない。コピペ荒らしと大した違いないと思うが。いかがかな?

004023 NGNG
>>39
すまんな、飽きっぽいんだよ。
それと、あんたの書き込みも俺のこの書き込みも、技術的な話題を
求めてくる人間にとっては十分に
> 醜い上に、情報量が少ない。コピペ荒らしと大した違いないと思うが。い
> かがかな?
ってことになるぜ。
あまり無理するな。
0041名無しさん@お腹いっぱい。 NGNG
>>40
技術系の掲示板やMLでも運営関連の話題は普通に行われてるよ。
004239 NGNG
答えも出てるようだし、このスレはもう用済みだろ。

>>23 で君が発言するまでは放置してたのにね。
ほっときゃいいのにねえ。君ってからかうと本当に面白そうだよ。
頭も腕もそんなに悪くはなさそうだけどね。
あんまり無理するなオマエモナ>23

俺って本当に性格悪いと思うよ。
0043名無しさん@お腹いっぱい。 NGNG
二人とも嫌なことがあったとしか思えないな >>39 >>23
■ このスレッドは過去ログ倉庫に格納されています