C言語関係掲示板

過去ログ

No.428.文字列を3つに分ける

[戻る] [ホームページ]
No.2983

文字列の抽出
投稿者---さな(2002/10/18 12:16:41)


C言語初心者です。
区切り文字なしで”20021018ABCDEF”というデータがあって
このようなデータを
・20021018
・ABC
・DEF
と3つに分けて変数に格納する処理を行ないたいのですが
substring関数のように何文字目から何文字までを取得する
関数などはないのですか?またこのような処理はどのように
行なえば実現可能ですか?strncat関数だと先頭何文字なので
上手くできません。お願いします。

No.2984

Re:文字列の抽出
投稿者---kamadoma(2002/10/18 13:01:23)


>C言語初心者です。
>区切り文字なしで”20021018ABCDEF”というデータがあって
>このようなデータを
>・20021018
>・ABC
>・DEF
>と3つに分けて変数に格納する処理を行ないたいのですが
>substring関数のように何文字目から何文字までを取得する
>関数などはないのですか?またこのような処理はどのように
>行なえば実現可能ですか?strncat関数だと先頭何文字なので
>上手くできません。お願いします。

memcpyを調べればできます


No.2986

Re:文字列の抽出
投稿者---さな(2002/10/18 13:43:13)


memcpyでも『先頭』から何バイトだから
20021018の取得はできますが
次のABC,DEFは上手く取得できないの
ではないですか?それとmemcpyを利用して
他に処理を追加するということですか?
質問ばかりですみません。




No.2987

Re:文字列の抽出
投稿者---かずま(2002/10/18 13:52:09)


> 区切り文字なしで”20021018ABCDEF”というデータがあって
> このようなデータを
> ・20021018
> ・ABC
> ・DEF
> と3つに分けて変数に格納する処理を行ないたいのですが
#include <stdio.h>

int main()
{
    static char data[] = "20021018ABCDEF";
    char str1[16], str2[16], str3[16];

    sscanf(data, "%8s%3s%3s", str1, str2, str3);
    printf("%s %s %s\n", str1, str2, str3);
    return 0;
}


No.3012

Re:文字列の抽出
投稿者---kamadoma(2002/10/19 00:15:24)


>C言語初心者です。
>区切り文字なしで”20021018ABCDEF”というデータがあって
>このようなデータを
>・20021018
>・ABC
>・DEF
>と3つに分けて変数に格納する処理を行ないたいのですが
>substring関数のように何文字目から何文字までを取得する
>関数などはないのですか?またこのような処理はどのように
>行なえば実現可能ですか?strncat関数だと先頭何文字なので
>上手くできません。お願いします。

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

int main(void)
{
	char str[14+1];
	char data01[8+1];
	char data02[3+1];
	char data03[3+1];

	strcpy(str,"20021018ABCDEF");

	/*先頭アドレスから8文字取得*/
	memcpy(data01,str,8);
	data01[8]='\0';

	/*先頭アドレスから8文字進んだところから3文字取得*/
	memcpy(data02,str+8,3);
	data02[3]='\0';

	/*先頭アドレスから11文字進んだところの3文字取得*/
	memcpy(data03,str+11,3);
	data03[3]='\0';

	/*結果表示*/
	printf("%s\n",data01);
	printf("%s\n",data02);
	printf("%s\n",data03);

	return 0;
}



No.3026

Re:文字列の抽出
投稿者---さな(2002/10/21 10:14:34)


kamadomaさん、かずまさん
アドバイスありがとうございます。
返事遅くなりました。すみません。

No.3056

Re:文字列の抽出
投稿者---えんりけ(2002/10/22 21:06:26)


kamadomaさんも書いてましたが、memcpy関数でstrのポインタの位置を何文字分か
移動させると、ポインタはそこで止っているんです。
だから、続けてmemcpy関数を使っていけば、strは止った場所からまた、何文字分
かデータを取りにいくんです。取りにいったら、そこで止まる。
これをくりかえしているんですね。