- ベストアンサー
文字列の連結するプログラム
独学でプログラミングをやっているんですが2つ文字列を1つにする方法がよくわかりません。(1)のプログラムは(b+3)のところは文字の長さを指定しているからだめで(2)はstrcpyやstrcatなどのコマンドを使わずにやるそうです。While分とかでやるんでしょうか?教えてください。 (1) #include <stdio.h> int main (void){ char spelA[] = "abc"; char spelB[] = "def"; char spelC[20]; int a,b; spel[6]=0; for(a=0;spel[a]!=0;a++){ spelC[i] = spelA[i]; }; for(b=0;spelB[b]!=0;b++){ spelC[b+3] = spelB[b]; }; printf("%s\n",spelC); return(0); }; (2) #include <stdio.h> #include <string.h> int main (void){ char spelA[] = "abc"; char spelB[] = "def"; char spelC[20]; strcpy(spelC,spelA); strcat(spelC,spelB); printf("%s\n",spelC); return(0); }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
標準ライブラリ関数を使っていいのなら strncat(a, b, n) 文字列a のうしろに文字列b の先頭 n文字を連結する。を用いるといいと思います。 また以下のように書いても大丈夫だと思います。(未確認ですが) #include <stdio.h> int main (void){ char spelA[] = "abc"; char spelB[] = "def"; char spelC[20]; int a,b; for(a=0;spel[a]!='\0';a++) spelC[a] = spelA[a]; for(b=0;spelB[b]!='\0';b++) spelC[a+b] = spelB[b]; spelC[a+b] = '\0'; printf("%s\n",spelC); return(0); } また文字列の長さはstrlen(文字列名)で識別できます.
その他の回答 (3)
- nerosuke
- ベストアンサー率33% (39/115)
文字列の結合だと趣旨が違うかもしれませんが、 こういうやり方もできます。 int Alen,Blen; Alen = strlen(spelA); Blen = strlen(spelB); if( (Alen+Blen+1)<20 ) { memcpy(spelC, spelA, Alen); memcpy(spelC+Alen, spelB, Blen); spelC[Alen+Blen] = '\0'; }
別の方法です。 #include <stdio.h> int main (void) { char spelA[] = "abc"; char spelB[] = "def"; char spelC[20]; int i, j; for (i = 0; spelA[i] != '\0'; i++) spelC[i] = spelA[i]; for (j = 0; spelB[j] != '\0'; j++, i++) spelC[i] = spelB[j]; spelC[i] = '\0'; printf("連結後の文字列:%s\n", spelC); return 0; };
#include <stdio.h> int main (void) { char spelA[] = "abc"; char spelB[] = "def"; char spelC[20]; sprintf(spelC, "%s%s", spelA, spelB); printf("連結後の文字列:%s\n", spelC); return 0; };