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

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

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

#1

投稿記事 by bonbo » 13年前

先日はありがとうございました。また質問ができたので質問させていただきます。
文字列を配列に1文字ずつ代入するという作業について、初期化処理の中で行っているプログラムはたくさんあったのですが、

コード:

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

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

nil
記事: 428
登録日時: 14年前

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

#2

投稿記事 by nil » 13年前

コード:

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

コード:

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

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

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

#3

投稿記事 by みけCAT » 13年前

素直に

コード:

char Message[2][100];
strcpy(Message[0],"おいしそう");
strcpy(Message[1],"いただきます");
参考:苦C http://9cguide.appspot.com/14-03.html
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

bonbo

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

#4

投稿記事 by bonbo » 13年前

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

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

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

#5

投稿記事 by みけCAT » 13年前

bonbo さんが書きました:なるほど、あと2バイトずつ表示するように工夫すれば…と思ったのですが
これでは1文字(たとえば"いただきます"の"き"だけ)を表示させることはできないのではないでしょうか…
へんな解釈をしていたらごめんなさい…
対象の文字コードは何ですか?(Windowsなら主にShift-JIS、Linuxなら主にUTF-8など)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

bonbo

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

#6

投稿記事 by bonbo » 13年前

>みけCATさん
たぶんShiftJISですね

non
記事: 1097
登録日時: 15年前

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

#7

投稿記事 by non » 13年前

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

bonbo

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

#8

投稿記事 by bonbo » 13年前

>nonさん
ありがとうございます。
>これでは1文字(たとえば"いただきます"の"き"だけ)を表示させることはできないのではないでしょうか…

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

コード:

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

non
記事: 1097
登録日時: 15年前

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

#9

投稿記事 by non » 13年前

コード:

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#10

投稿記事 by softya(ソフト屋) » 13年前

文字列は文字の配列ですから配列から添字で1文字づつ取り出すことはできます。
ただし漢字コードは2文字分で1文字を構成するので取り扱いに注意が必要ですって事ですね。

極端な例です。

コード:

#include <stdio.h>

int main(void)
{
	putchar( "あいうえお"[2] );
	putchar( "あいうえお"[3] );
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

bonbo

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

#11

投稿記事 by bonbo » 13年前

>nonさん
なるほど…
みなさんありがごうございました。

bonbo

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

#12

投稿記事 by bonbo » 13年前

>soft屋さん
なるほど…ありがとうございます…

閉鎖

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