ページ 1 / 1
2つの文字列の連結について
Posted: 2012年5月16日(水) 15:24
by 亮@井桁
はじめまして。プログラミングを始めて半年になります。亮です。突然で申し訳ないのですが、こちらのコード
[codeタグ] プログラムの投稿はcodeタグをご利用下さい。 投稿ルール
http://dixq.net/board/board.html
コード:
#include <stdio.h>
main()
{
int i = 0, j =0;
char a[12] = "book", b[] = "marks";
printf("%s+%s = ", a, b);
while(a[i] != '\0')
i++;
while(b[j] != '\0'){
a[i] = b[j];
i++;
j++;
}
a[i] = '\0';
printf("%s\n", a);
}
このコードをfor文で書き換えできないかなと思い自分なりに書き換えてみたのが↓なのですが、
コード:
#include <stdio.h>
int main()
{
int i = 0, j = 0;
char a[12] = "book", b[] = "marks";
printf("%s + %s = ", a, b);
for(i=0; a[i] != '\0'; i++){
}
for(j=0; b[j] != '\0'; j++){
i++;
a[i] = b[j];
}
a[i] = '\0';
printf("%s%s\n",a);
}
このコードで結果としてbookmarkと表示のですが、%sがひとつだけにするとbookになってしまうのですが、%sひとつだけでbookmarkと表示させることはできるのでしょうか?もしよろしければお教え願いします。
Re: 2つの文字列の連結について
Posted: 2012年5月16日(水) 15:38
by だんごさん
もし関数を使わずにやりたいのであれば無視してください。
string.hの関数で、文字列を連結させることもできます。
ご参考までに…
Re: 2つの文字列の連結について
Posted: 2012年5月16日(水) 15:40
by Blue
bの中身をaのお尻に入れるときに、終端文字('\0'の次から入れちゃっているので、
%sでは終端文字までを表示するため、「book」しかでなくなっちゃってます。
コード:
for(i=0; a[i] != '\0'; i++){
}
ここですね。iは'\0'のインデックスになっているので、
コード:
for(j=0; b[j] != '\0'; j++){
i++;
a[i] = b[j];
}
の「i++;」で'\0'の次からbの文字を入れているのが間違いですね。
「i++;」と「a
= b[j];」をいれかえると・・・
Re: 2つの文字列の連結について
Posted: 2012年5月16日(水) 15:42
by bitter_fox
亮@井桁 さんが書きました:はじめまして。プログラミングを始めて半年になります。亮です。突然で申し訳ないのですが、こちらのコード
コードタグをご使用ください。詳しくは
http://dixq.net/board/board.html#k10
亮@井桁 さんが書きました:
コード:
while(a[i] != '\0')
i++;
while(b[j] != '\0'){
a[i] = b[j];
i++;
j++;
}
コード:
for(i=0; a[i] != '\0'; i++){
}
for(j=0; b[j] != '\0'; j++){
i++;
a[i] = b[j];
}
最初のコードと二つ目のコードは完全に同じではありません。
もう少し詳しく言うと前半の処理は同じですが後半のループが違っています。
この状況で初めてa
= b[j];が実行されるときのiの値を一つ目と二つ目で比べてみてください。
Re: 2つの文字列の連結について
Posted: 2012年5月16日(水) 23:00
by 亮@井桁
貴重なアドバイスありがとうございました。なんとか解決できました。これからも、何かとこの掲示板を利用するかもしれませんがそのときはまたアドバイスよろしくお願いします。
Re: 2つの文字列の連結について
Posted: 2012年5月17日(木) 07:16
by beatle
解決おめでとうございます。
フォーラムルールに書いてありますが、解決した方法やソースコードをご提示下さい。お願いします。
Re: 2つの文字列の連結について
Posted: 2012年5月17日(木) 11:42
by 亮@井桁
コード:
#include <stdio.h>
int main()
{
int i = 0, j = 0;
char a[12] = "book", b[] = "marks";
printf("%s + %s = ", a, b);
for(i=0; a[i] != '\0'; i++)
{
printf("i = %d\n", i);
}
for(j=0; b[j] != '\0'; j++)
{
a[i] = b[j];
i++;
printf("i = %d j = %d\n", i, j);
}
a[i] = '\0';
printf("%s\n",a);
}
アドバイスいただいて書き直したコードです。12、13行目のi++;とa
= b[j];を入れ替えたらうまくいきました。
Re: 2つの文字列の連結について
Posted: 2012年5月17日(木) 11:43
by 亮@井桁
亮@井桁 さんが書きました:コード:
#include <stdio.h>
int main()
{
int i = 0, j = 0;
char a[12] = "book", b[] = "marks";
printf("%s + %s = ", a, b);
for(i=0; a[i] != '\0'; i++)
{
printf("i = %d\n", i);
}
for(j=0; b[j] != '\0'; j++)
{
a[i] = b[j];
i++;
printf("i = %d j = %d\n", i, j);
}
a[i] = '\0';
printf("%s\n",a);
}
アドバイスいただいて書き直したコードです。i++;とa
= b[j];を入れ替えたらうまくいきました。