文字列を配列に入れる方法

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

文字列を配列に入れる方法

#1

投稿記事 by yopi » 4年前

お世話になります。

void setup(int n);
// 長さ n のデータ列を設定する
//nはコマンドラインから取得

char *getStr();
// setup で設定されたデータの列から次の文字列を1つ取り出して返してくる
// データの列が尽きているなら NULL を返してくる

という2つの関数があります。
getStrで取り出したデータを配列に入れていき、
今までと同じ文字列があったらカウントして、
結果、文字列は何種類あって、何個同じ文字列があったか
を出力したいと思っています。


取り急ぎ、文字列を配列に入れる方法を教えていただきたいです。
よろしくお願いします。

かずま

Re: 文字列を配列に入れる方法

#2

投稿記事 by かずま » 4年前

yopi さんが書きました:
4年前
取り急ぎ、文字列を配列に入れる方法を教えていただきたいです。
文字列のアドレスだけを配列に入れるやり方。

コード:

#include <stdio.h>

char *data[] = { "abc", "def", "ghi", "def"  };
int ndata = sizeof(data) / sizeof(data[0]);
int idata = 0;

char *getStr() { return idata < ndata ? data[idata++] : NULL; }

#define SIZE 20  // 配列のサイズ

int main(void)
{
	char *a[SIZE], *p;
	int n;
	for (n = 0; n < SIZE && (p = getStr()) != NULL; n++)
		a[n] = p;  // getStr で取得した文字列を配列 a に代入

	for (int i = 0; i < n; i++)       // 確認用
		printf("%d: %s\n", i, a[i]);  // 配列 a の内容を表示
}
文字列のコピーを配列に入れる方法。

コード:

#include <stdio.h>
#include <string.h>  // strcpy

char *data[] = { "abc", "def", "ghi", "def"  };
int ndata = sizeof(data) / sizeof(data[0]);
int index = 0;

char *getStr() { return index < ndata ? data[index++] : NULL; }

#define SIZE 20  // 配列のサイズ
#define LEN  64  // 文字列の最大長 + 1

int main(void)
{
	char a[SIZE][LEN], *p;
	int n;
	for (n = 0; n < SIZE && (p = getStr()) != NULL; n++)
		strcpy(a[n], p);  // getStr で取得した文字列を配列 a にコピー

	for (int i = 0; i < n; i++)       // 確認用
		printf("%d: %s\n", i, a[i]);  // 配列 a の内容を表示
}
以上の 2つの方法を試してみて、どちらが希望するものかを教えてください。

また、setup で設定する「データの列」と、
getStr で取り出す「文字列」の関係はどうなっているのですか?
具体例で示してください。

返信

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