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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
赤鬼

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

#1

投稿記事 by 赤鬼 » 12年前

コード:

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

#2

投稿記事 by 赤鬼 » 12年前

記事のとちゅうで謝って送信してしまいました。
申し訳ありません。

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

赤鬼

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

#3

投稿記事 by 赤鬼 » 12年前

あ、msしてました。
for(i=0;i<10;i++)
str=*uketori;
これだと10以上の時におかしくなりますね。

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

nil
記事: 428
登録日時: 12年前

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

#4

投稿記事 by nil » 12年前

str配列の要素数が11ならばarrayのなかの値のどれかが10以上であった場合オーバーフローしませんか?

hoge

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

#5

投稿記事 by hoge » 12年前

これぐらいしか思い浮かばないです

コード:

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);  

アバター
HolyWings
記事: 12
登録日時: 13年前

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

#6

投稿記事 by HolyWings » 12年前

こういう方法もありますよ。
ただし、配列 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: すみません初歩的な質問で悪いのですが配列から文字列に変換する方法なのですが、効率的に変換する方法はありますか?

#7

投稿記事 by 赤鬼 » 12年前

涼雅
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に置き換えることもできますね。

閉鎖

“C言語何でも質問掲示板” へ戻る