2つの文字列の連結について

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

2つの文字列の連結について

#1

投稿記事 by 亮@井桁 » 12年前

はじめまして。プログラミングを始めて半年になります。亮です。突然で申し訳ないのですが、こちらのコード

[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と表示させることはできるのでしょうか?もしよろしければお教え願いします。

だんごさん
記事: 273
登録日時: 12年前

Re: 2つの文字列の連結について

#2

投稿記事 by だんごさん » 12年前

もし関数を使わずにやりたいのであれば無視してください。

string.hの関数で、文字列を連結させることもできます。
ご参考までに…
 Dango San

Blue

Re: 2つの文字列の連結について

#3

投稿記事 by Blue » 12年前

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];」をいれかえると・・・

アバター
bitter_fox
記事: 607
登録日時: 13年前
住所: 大阪府

Re: 2つの文字列の連結について

#4

投稿記事 by bitter_fox » 12年前

亮@井桁 さんが書きました:はじめまして。プログラミングを始めて半年になります。亮です。突然で申し訳ないのですが、こちらのコード
コードタグをご使用ください。詳しくは 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つの文字列の連結について

#5

投稿記事 by 亮@井桁 » 12年前

貴重なアドバイスありがとうございました。なんとか解決できました。これからも、何かとこの掲示板を利用するかもしれませんがそのときはまたアドバイスよろしくお願いします。

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: 2つの文字列の連結について

#6

投稿記事 by beatle » 12年前

解決おめでとうございます。
フォーラムルールに書いてありますが、解決した方法やソースコードをご提示下さい。お願いします。

亮@井桁

Re: 2つの文字列の連結について

#7

投稿記事 by 亮@井桁 » 12年前

コード:

#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つの文字列の連結について

#8

投稿記事 by 亮@井桁 » 12年前

亮@井桁 さんが書きました:

コード:

#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];を入れ替えたらうまくいきました。

閉鎖

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