「文字列データ」

文字列データ操作ライブラリ関数 string.h

C言語の標準ライブラリには文字列データを扱うためのライブラリ関数が用意 されている。 以下はその一部である。
これらの関数は string.hをインクルードすることで使用可能となる。
※ 引数としてポインタ変数(引数名の前に"*"がついている)を取る仕様になっ ているが、ポインタについては後で解説する。 ここでは引数として文字列データを与えるものと考えてよい。

以下の サンプルコードは文字列データ操作ライブラリの使用例である。

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

void
check_string(char str[])
{
    char tmpbuf[256];    /* 十分な大きさにする(ここでは256) */

    /* strの文字列を tmpbufにコピー */
    strcpy(tmpbuf, str);

    /* それぞれの文字列の内容と長さを表示 */
    printf("original string = '%s' (len=%d)\n", str, strlen(str));
    printf("copy string = '%s' (len=%d)\n", tmpbuf, strlen(tmpbuf));

    /* 文字列の比較(ここでは同じはず) */
    if (strcmp(tmpbuf, str) == 0)
	printf("2 string is same\n");
    else
	printf("2 string is different\n");

    printf("\n");

    /* tmpbufの文字列の後ろに別の文字列を連結 */
    strcat(tmpbuf, ", far away");

    /* それぞれの文字列の内容と長さを表示 */
    /* (連結した分 tmpbuf側の文字列が長くなっている) */
    printf("original string = '%s' (len=%d)\n", str, strlen(str));
    printf("copy string = '%s' (len=%d)\n", tmpbuf, strlen(tmpbuf));

    /* 文字列の比較(ここでは異なるはず) */
    if (strcmp(tmpbuf, str) == 0)
	printf("2 string is same\n");
    else
	printf("2 string is different\n");
}

int
main(void)
{
    check_string("A Long time ago in a galaxy");

    return 0;
}

実行結果は以下のようになる。

original string = 'A Long time ago in a galaxy' (len=27)
copy string = 'A Long time ago in a galaxy' (len=27)
2 string is same

original string = 'A Long time ago in a galaxy' (len=27)
copy string = 'A Long time ago in a galaxy, far away' (len=37)
2 string is different

文字列データ入出力ライブラリ関数

文字列データの入出力として以下の関数が用意されている。
これらの関数は stdio.hをインクルードすることで使用可能となる。

以下の サンプルコードは文字列データ入出力ライブラリを使った例である。
入力した文字列から空白を除去して出力する。

#include <ctype.h>
#include <stdio.h>

#define	MAXSTRLEN    1000        /* 最大1000文字 */

/* 空白文字除去 */
void
delete_space(char dst[], char src[])
{
    int i, j;

    i = 0; j = 0;

    while (src[i] != '\0') {
	if (isspace(src[i])) {    /* 空白文字ならば読み飛ばす */
	    i++;
	}
	else {
	    dst[j++] = src[i++];  /* そうでなければ、srcからdstに1文字コピー */
	}
    }
    
    dst[j] = '\0';        /* 最後にNULL文字をセット */
}

int
main(void)
{
    char strbuf[MAXSTRLEN+1];    /* 文字列入力用バッファ */
    char strbuf2[MAXSTRLEN+1];   /* 文字列変換結果格納用バッファ */

    printf("input=");
    while (gets(strbuf) != NULL) {        /* 1行入力 */
                                          /* (入力終了時はNULLが返る) */
	delete_space(strbuf2, strbuf);

	printf("input string=%s\n", strbuf);
	printf("space deleted=%s\n", strbuf2);

	printf("input=");
    }

    return 0;
}

実行結果は以下のようになる。

input=A = 123 + 45 - 67*8 / 9
input string=A = 123 + 45 - 67*8 / 9
space deleted=A=123+45-67*8/9
1行入力後エンターキーを叩くと入力した文字列から空白文字を除去して出力 する。
(プログラムの終了はCtrl-Z(windowsの場合)を押して入力を終了するか、 Ctrl-Cを押して強制終了する)

文字列データ変換ライブラリ関数

C言語の標準ライブラリには 文字列から数値データへの変換を行なう関数が用意されている。
これらの関数は stdlib.hをインクルードすることで使用可能となる。

以下の サンプルコードは文字列データ変換ライブラリの使用例である。

#include <stdlib.h>    /* stdlib.hをインクルード */
#include <stdio.h>

int
main(void)
{
    char strbuf[500];        /* 文字列入力用のバッファ(最大499文字分) */

    printf("input number=");
    gets(strbuf);            /* 1行入力 */

    printf("input string = '%s'\n", strbuf);
    printf("atoi = %d\n", atoi(strbuf));    /* intに変換 */
    printf("atof = %g\n", atof(strbuf));    /* doubleに変換 */

    return 0;
}

実行結果は以下のようになる。

input number=3.1415926535
input string = '3.1415926535'
atoi = 3
atof = 3.14159

他にも有用な関数が用意されているので、Visual Studioのヘルプを使って 調べてみるとよい。


文責:石川