スポンサード リンク

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサード リンク
-- : -- : -- | スポンサー広告 | page top↑
スポンサード リンク

C/C++にsplit関数はなく、代わりにstrtok関数を使う

文字列を分割するために、多くの言語ではsplit関数(メソッド)(*1)が用意されています。しかし、C言語(C++にも!)にはそれに相当するライブラリ関数がないので、代わりにポインタを操作するstrtok関数を使用します。

この関数自体の説明は多くのサイトでされていますが、意外にも分割した文字列を順にputsするだけのサンプルが多かったので、split関数のように配列に格納するプログラムを作ってみました。

例えば、文字列をスペース" "で区切って、別の配列に格納するためには次のようにします(いろいろと面倒なので、mallocはしていません。関数化するのもこれまた面倒なので、使用の際は最近話題のコピペでお願いします^^;)

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

#define MAX_LEN  100

int main() {
    int i, len;
    char str[] = "This is a test", *words[MAX_LEN], *cp;
    const char *delim = " ";

    cp = str;
    for (len = 0; len < MAX_LEN; len++) {
        if ((words[len] = strtok(cp, delim)) == NULL)
            break;
        cp = NULL;
    }
    for (i=0; i<len; i++) {
        puts(words[i]);
    }

    return 0;
}

出力結果

This
is
a
test
新・C言語入門 シニア編 (C言語実用マスターシリーズ)新・C言語入門 シニア編 (C言語実用マスターシリーズ)
林 晴比古

ソフトバンククリエイティブ 2004-02
売り上げランキング : 62164
おすすめ平均

Amazonで詳しく見る
by G-Tools

*1: 例えば、Javaでは

public class SplitTest {
	public static void main(String args[]) {
		String str = "This is a test";
		String[] words = str.split(" ");
		
		for(String s : words) {
			System.out.println(s);
		}
	}
}

C#では

class SplitTest
{
    static void Main()
    {
        string str = "This is a test";
        char[] sep = { ' ' };
        string[] words = str.Split(sep);
        foreach (string s in words)
        {
            System.Console.WriteLine(s);
        }
    }
}

のように使用し、いずれも出力は次のようになります。

This
is
a
test

スポンサード リンク

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

20 : 53 : 19 | プログラミング-C/C++ | トラックバック(0) | コメント(0) | page top↑
<<CCNA 640-802J の参考書 | ホーム | JavaとC#のコレクションクラスの対応表>>
コメント

コメントの投稿














管理者にだけ表示を許可する

トラックバック
トラックバックURL
http://networkprogramming.blog18.fc2.com/tb.php/89-48b8ff66
この記事にトラックバックする(FC2ブログユーザー)
| ホーム |

プロフィール

TBVector

Author:TBVector

プロフィール

メールフォーム

記事検索

Google

最近の記事

人気の記事

過去の記事

カテゴリー

タグランキング

リンク

最近のコメント

最近のトラックバック

アクセスカウンタ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。