ページ 11

文字列の移し方

Posted: 2007年11月23日(金) 18:29
by だいちゃん
はじめまして。だいちゃんともうします。

超初心者の質問で申し訳ないのですが、ご教授お願いします。

文字列
char data[1024]
"ヤマダ タロウ 20トウキョウト シブヤク ・・・・
というデータ(csvでない)がありそのデータを

char name[20]
char age[3]
char address1[10]
char address2[20]


というような桁数を定義した項目に移して処理を行いたいのですが
dataから各項目の文字列へ一度にデータを移す方法はないでしょうか?
文字列の定義の仕方で解決できるか調べたのですが、わかりませんでした。
よろしくお願いいたします。

Re:文字列の移し方

Posted: 2007年11月23日(金) 18:55
by box
元の文字列で、氏名、年齢、住所などの
項目の区切りを示す情報は全くないのでしょうか?

Re:文字列の移し方

Posted: 2007年11月23日(金) 23:56
by だいちゃん
バイト位置で判断できます
1~20バイト目が氏名
21~23バイトが年齢という感じです

Re:文字列の移し方

Posted: 2007年11月24日(土) 00:27
by box
ベタな書き方をすれば、こんな感じでしょうか。


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

#define LEN_NAME     (20)
#define LEN_AGE       (3)
#define LEN_ADDRESS1 (10)
#define LEN_ADDRESS2 (20)

typedef struct person {
	char name[LEN_NAME+1];				// +1は終端の'\0'用(以下同様)
	char age[LEN_AGE+1];
	char address1[LEN_ADDRESS1+1];
	char address2[LEN_ADDRESS2+1];
} Person;

int main(void)
{
	//                          1         2         3         4         5
	//                 12345678901234567890123456789012345678901234567890123
	char data[1024] = "山田太郎            20 東京都    渋谷区神南1-1-1     ";
	Person person;
	
	strncpy(person.name, &data[0], LEN_NAME);
	person.name[LEN_NAME] = '\0';
	strncpy(person.age, &data[LEN_NAME], LEN_AGE);
	person.age[LEN_AGE] = '\0';
	strncpy(person.address1, &data[LEN_NAME+LEN_AGE], LEN_ADDRESS1);
	person.address1[LEN_ADDRESS1] = '\0';
	strncpy(person.address2, &data[LEN_NAME+LEN_AGE+LEN_ADDRESS1], LEN_ADDRESS2);
	person.address2[LEN_ADDRESS2] = '\0';
	
	printf("%s\n", person.name);
	printf("%s\n", person.age);
	printf("%s\n", person.address1);
	printf("%s\n", person.address2);
	return 0;
}

Re:文字列の移し方

Posted: 2007年11月24日(土) 02:45
by フリオ
 
 この掲示板は、マルチポストは禁止です。

 こんな感じでいいのでしょうか。
#include <stdio.h>

int main(void)
{
	char *data = "山田太郎            20 東京都    渋谷区神南1-1-1     ";
	char name[21], age[4], adress1[11], adress2[21];
	
	sprintf(name, "%.20s", data);
	sprintf(age, "%.3s", data + 20);
	sprintf(adress1, "%.10s", data + 23);
	sprintf(adress2, "%.20s", data + 33);
	printf("%s|\n", name);
	printf("%s|\n", age);
	printf("%s|\n", adress1);
	printf("%s|\n", adress2);
	return 0;
}
 

Re:文字列の移し方

Posted: 2007年11月24日(土) 06:27
by フリオ
 
 "一度に"だと、こっちの方がいいでしょうか。
#include <stdio.h>

int main(void)
{
	char *data = "山田太郎            20 東京都    渋谷区神南1-1-1     ";
	char name[21], age[4], adress1[11], adress2[21];
	
	sscanf(data, "%20c%3c%10c%20c", name, age, adress1, adress2);
	name[20] = age[3] = adress1[10] = adress2[20] = 0;
	printf("%s|\n", name);
	printf("%s|\n", age);
	printf("%s|\n", adress1);
	printf("%s|\n", adress2);
	return 0;
}

Re:文字列の移し方

Posted: 2007年11月24日(土) 23:50
by だいちゃん
ありがとうございました!
教えていただいた方法でできると思います。
参考にさせていただきます。