• ベストアンサー

文字列の連結するプログラム

独学でプログラミングをやっているんですが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); }

質問者が選んだベストアンサー

  • ベストアンサー
  • furibsha
  • ベストアンサー率25% (1/4)
回答No.3

標準ライブラリ関数を使っていいのなら 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(文字列名)で識別できます.

参考URL:
 http://www9.plala.or.jp/sgwr-t/c/sec07.html

その他の回答 (3)

  • nerosuke
  • ベストアンサー率33% (39/115)
回答No.4

文字列の結合だと趣旨が違うかもしれませんが、 こういうやり方もできます。 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'; }

noname#22058
noname#22058
回答No.2

別の方法です。 #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; };

noname#22058
noname#22058
回答No.1

#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; };

関連するQ&A