ページ 11

配列に文字を1字ずつ代入する

Posted: 2012年7月27日(金) 13:54
by bonbo
先日はありがとうございました。また質問ができたので質問させていただきます。
文字列を配列に1文字ずつ代入するという作業について、初期化処理の中で行っているプログラムはたくさんあったのですが、

コード:

char Message[2][100]={//こんな感じにです
	"おいしそう",
	"いただきます",
};
それ以外の場合に文字を配列にいれる方法が見当たらなかったのですが、どうやればいいのでしょうか。

つまり、
初期化処理以外で、
上記のMessageの状態を作るにはどうしたらよいのかということです。

Re: 配列に文字を1字ずつ代入する

Posted: 2012年7月27日(金) 14:12
by nil

コード:

const char Message[2][100]={//こんな感じにです
    "おいしそう",
    "いただきます",
};
まずこの配列を用意し、

コード:

char buf[ 2 ][ 100 ]; // 格納先
for( int i=0; i<2; i++ ) strcpy( buf, Message );
とかどうでしょう

Re: 配列に文字を1字ずつ代入する

Posted: 2012年7月27日(金) 14:19
by みけCAT
素直に

コード:

char Message[2][100];
strcpy(Message[0],"おいしそう");
strcpy(Message[1],"いただきます");
参考:苦C http://9cguide.appspot.com/14-03.html

Re: 配列に文字を1字ずつ代入する

Posted: 2012年7月27日(金) 15:10
by bonbo
>涼雅さん
ありがとうございます。ただそれだとやはり初期化処理を行う段階で格納しなきゃならないですよね…
>みけCATさん
ありがとうございます。
なるほど、あと2バイトずつ表示するように工夫すれば…と思ったのですが
これでは1文字(たとえば"いただきます"の"き"だけ)を表示させることはできないのではないでしょうか…
へんな解釈をしていたらごめんなさい…

Re: 配列に文字を1字ずつ代入する

Posted: 2012年7月27日(金) 15:37
by みけCAT
bonbo さんが書きました:なるほど、あと2バイトずつ表示するように工夫すれば…と思ったのですが
これでは1文字(たとえば"いただきます"の"き"だけ)を表示させることはできないのではないでしょうか…
へんな解釈をしていたらごめんなさい…
対象の文字コードは何ですか?(Windowsなら主にShift-JIS、Linuxなら主にUTF-8など)

Re: 配列に文字を1字ずつ代入する

Posted: 2012年7月27日(金) 15:52
by bonbo
>みけCATさん
たぶんShiftJISですね

Re: 配列に文字を1字ずつ代入する

Posted: 2012年7月27日(金) 16:49
by non
bonbo さんが書きました:>なるほど、あと2バイトずつ表示するように工夫すれば…と思ったのですが
これでは1文字(たとえば"いただきます"の"き"だけ)を表示させることはできないのではないでしょうか…
へんな解釈をしていたらごめんなさい…
もう少しわかるように説明してください。何をいいたいのか理解できません。

コード:

#include<stdio.h>
#include<string.h>
int main(void)
{
	int i=0;
	char Message[2][100];
	strcpy(Message[0],"おいしそう");
	strcpy(Message[1],"いただきます");
	while(Message[1][i]!='\0'){
		putchar(Message[1][i++]);
		putchar(Message[1][i++]);
		putchar('\n');
	}
	return 0 ;
}

Re: 配列に文字を1字ずつ代入する

Posted: 2012年7月27日(金) 17:13
by bonbo
>nonさん
ありがとうございます。
>これでは1文字(たとえば"いただきます"の"き"だけ)を表示させることはできないのではないでしょうか…

つまり
みけCATさんのおっしゃる通りに

コード:

char text[100][100];
char Message[2][100];
strcpy(Message[0],"おいしそう");
strcpy(Message[1],"いただきます"); 
strncpy(text,Message[0],3);
とすると、strncpyを使って別の配列に中身を渡すことができるが、
それでは、"いただきます" や ""いただ" などは表示できても "だき" や "ます" は表示できないのではないか。ということです。

Re: 配列に文字を1字ずつ代入する

Posted: 2012年7月27日(金) 17:38
by non

コード:

#include<stdio.h>
#include<string.h>
int main(void)
{
	int i=0;
	char Message[2][100];
	char text[100][100]={'\0'};
	strcpy(Message[0],"おいしそう");
	strcpy(Message[1],"いただきます");
	strncpy(text[0],&Message[1][4],4);
	puts(text[0]);
	strcpy(text[1],&Message[1][8]);
	puts(text[1]);
	return 0 ;
}

Re: 配列に文字を1字ずつ代入する

Posted: 2012年7月27日(金) 18:14
by softya(ソフト屋)
文字列は文字の配列ですから配列から添字で1文字づつ取り出すことはできます。
ただし漢字コードは2文字分で1文字を構成するので取り扱いに注意が必要ですって事ですね。

極端な例です。

コード:

#include <stdio.h>

int main(void)
{
	putchar( "あいうえお"[2] );
	putchar( "あいうえお"[3] );
}

Re: 配列に文字を1字ずつ代入する

Posted: 2012年7月27日(金) 18:15
by bonbo
>nonさん
なるほど…
みなさんありがごうございました。

Re: 配列に文字を1字ずつ代入する

Posted: 2012年7月27日(金) 18:17
by bonbo
>soft屋さん
なるほど…ありがとうございます…