ページ 11

すみません初歩的な質問で悪いのですが配列から文字列に変換する方法なのですが、効率的に変換する方法はありますか?

Posted: 2012年4月02日(月) 00:44
by 赤鬼

コード:

int i;
char str[11]={0};
int arr[10]={0};

arr[2]=1;
arr[3]=4;
arr[6]=5;

例えばこの二つの配列を取ったとして考えたのですが。
int型の整数であれば、sprintfもしくはitoaを使えば

コード:

int kazu=0;
char str[10]={0};

kazu=100;

sprintf(str,"d",kazu);

/*もしくは
itoa(kazu,str,10);
*/

なので

コード:

int i=0;
	int arr[10]={0};
	char uketori[256]={0};
	char str[11]={0};

	arr[2]=1;
	arr[3]=4;
	arr[6]=5;
	for(i=0;i<10;i++){
		sprintf(uketori,"%d",arr[i]);
		str[i]=*uketori;
	}
	str[11]='\0';
	printf("%s",str);
こうすれば一応は整数配列を文字列に変換できますが、あまり効率的とはいえない気がします。

Re: すみません初歩的な質問で悪いのですが配列から文字列に変換する方法なのですが、効率的に変換する方法はありますか?

Posted: 2012年4月02日(月) 00:47
by 赤鬼
記事のとちゅうで謝って送信してしまいました。
申し訳ありません。

これよりも効率の良い方法は無いでしょうか?

Re: すみません初歩的な質問で悪いのですが配列から文字列に変換する方法なのですが、効率的に変換する方法はありますか?

Posted: 2012年4月02日(月) 00:54
by 赤鬼
あ、msしてました。
for(i=0;i<10;i++)
str=*uketori;
これだと10以上の時におかしくなりますね。

strcat(str,uketori);
に変えてください。

Re: すみません初歩的な質問で悪いのですが配列から文字列に変換する方法なのですが、効率的に変換する方法はありますか?

Posted: 2012年4月02日(月) 02:00
by nil
str配列の要素数が11ならばarrayのなかの値のどれかが10以上であった場合オーバーフローしませんか?

Re: すみません初歩的な質問で悪いのですが配列から文字列に変換する方法なのですが、効率的に変換する方法はありますか?

Posted: 2012年4月02日(月) 02:53
by hoge
これぐらいしか思い浮かばないです

コード:

int i=0;
int arr[10]={0};
char str[256]={0};
char *uketori = str;

arr[2]=1;
arr[3]=4;
arr[6]=5;
for(i=0;i<10;i++){
    uketori += sprintf(uketori,"%d",arr[i]);
}
printf("%s",str);  

Re: すみません初歩的な質問で悪いのですが配列から文字列に変換する方法なのですが、効率的に変換する方法はありますか?

Posted: 2012年4月02日(月) 10:57
by HolyWings
こういう方法もありますよ。
ただし、配列 arr の値が0 ~9の間の時に限ってですけど。

コード:

int i ;
int arr[ 10 ] = { 0 };
char str[ 11 ]  = { 0 };

arr[ 2 ] = 1;
arr[ 3 ] = 4;
arr[ 6 ] = 5;

for( i = 0; i < 10; i++ ){
    str[ i ] = '0' + (char)arr[ i ];
}
str[ i ] = 0;

printf( "%s" , str );


Re: すみません初歩的な質問で悪いのですが配列から文字列に変換する方法なのですが、効率的に変換する方法はありますか?

Posted: 2012年4月02日(月) 15:07
by 赤鬼
涼雅
str配列の要素数が11ならばarrayのなかの値のどれかが10以上であった場合オーバーフローしませんか?

おっと、そうでした
多めに取っておいたほうが良いですね
あ、ついでにstr[11]='0'これもアウトですね

hogeさん
有難うございます!
なるほど!
コピーして、sprintfの戻り値でポインタを進めて。
ポインタ使えば馬鹿みたいに配列取らなくても良かったですね。

HolyWingsさん
有難うございます!
此処ですが
for( i = 0; i < 10; i++ ){
str[ i ] = '0' + (char)arr[ i ];
}
ぱっと見ASCIIコードに対応させてると思ったんですが
'0'は確か0x30だから48に置き換えることもできますね。