文字列の分割について、どなたかご教授お願いします。

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

文字列の分割について、どなたかご教授お願いします。

#1

投稿記事 by gan » 3年前

strtok 関数を使わずに文字列を分解する方法が全く思いつかないです。
以下、コードです。

コード:

#include <stdio.h>

struct string{
	char c[100];			/* 文字 */
};

struct str_split{
	int index;				/* 分割個数 */
	struct string str[100];	/* 分割文字列 */
};

/*
	名称	split
	引数	const char *in_dat:文字列(カンマ区切り)
			struct str_split *out_dat:分割文字列
	戻り値	無し
*/

/*----- ここより下に解答を記述してください -----*/
void split(const char *in_dat, struct str_split *out_dat)
{
	int i = 0;
	
	for(in_dat != 0){
		(out_dat->str[i]) = (in_dat[i]);
		i++;
	}
	
	return;
}
/*----- ここより上に解答を記述してください -----*/

int main(void)
{
	char in_buf[100];
	struct str_split out_buf;
	int i;
	
	printf("文字列(カンマ区切り)=");
	scanf("%s", &in_buf);
	
	/*----- ここより下に解答を記述してください -----*/
	void split(in_buf, out_buf);
	/*----- ここより上に解答を記述してください -----*/

	puts("----- 処理後 -----");	

	for(i = 0; i < out_buf.index; i++)
		printf("%d:%s\n", i + 1, out_buf.str[i].c);
	
	return 0;
}
表示例① 表示例②
文字列:12,345 文字列:12,,345
1:12 1:12
2:345 2:
3:345
このような答えを表示したいです。
配列に入っているカンマ付きの文字列をまず、分割文字列の配列に移し、
一文字ずつ判定(カンマが来たら\0を代入)して文字の配列に入れるのかなと考えました。

プログラムも途中ですいません。上記の表示例を出すためにはどのように書けばいいのかご教授願いたいです。
構造体の配列部分のところもいまいちなのでその部分もお時間ありましたら教えてください。

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

Re: 文字列の分割について、どなたかご教授お願いします。

#2

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

カンマがあったら今の要素に終端を加えてコピー先を次の要素にする、とするといいでしょう。

コード:

void split(const char *in_dat, struct str_split *out_dat)
{
	int i, pos = 0;
	out_dat->index = 0;
	for(i = 0; in_dat[i] != '\0'; i++){
		if(in_dat[i] == ','){ /* カンマがあったら */
			out_dat->str[out_dat->index].c[pos] = '\0'; /* 今の要素に終端を加えて */
			out_dat->index++; /* コピー先を次の要素にする */
			pos = 0;
		} else {
			out_dat->str[out_dat->index].c[pos++] = in_dat[i];
		}
	}
	/* 最後の要素を確定させる */
	out_dat->str[out_dat->index].c[pos] = '\0';
	out_dat->index++;
}
main関数内では、余計なvoidを外してout_bufのかわりにout_bufへのポインタを渡すようにするといいでしょう。
scanfの引数に余計な&がついているのも外せると、さらにいいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

gan

Re: 文字列の分割について、どなたかご教授お願いします。

#3

投稿記事 by gan » 3年前

とても丁寧でわかりやすかったです!
本当にありがとうございます!!

返信

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