strtok(C/C++), StringTokenizer(Java)

[機能]

  文字列を与えられた区切り文字で区切って返します.最初に呼び出されると,文字列中の区切り文字で区切られた最初の文字列へのポインタを返します.その後,同じ文字列に対し strtok 関数を使用すると,文字列中の次の区切り文字で区切られた文字列に対するポインタを返します.ただし,この場合,文字列に NULL ポインタを指定してやる必要があります.それ以上の文字列が存在しないときは,NULL ポインタを返します.strtok 関数は,呼び出される度に区切り文字の前に NULL 文字( '\0' )が挿入され,文字列は変更される点に注意してください.

  Java の場合は,以下に示すように,StringTokenizer クラスのコンストラクタやメソッドを使用できます.

[形式]
( C/C++ の場合)

	#include <string.h>

	char *strtok(char *str1, const char *str2)
		str1 : 文字列
		str2 : 区切り文字群

( Java の場合: StringTokenizer クラスのコンストラクタとメソッド)

	public StringTokenizer(String str)   コンストラクタ
	public StringTokenizer(String str, String delim)   コンストラクタ
	public int countTokens()   トークンの数
	public boolean hasMoreTokens()   次のトークンがあるか否か
	public String nextToken()   次のトークンの取り出し
	public String nextToken(String delim)   次のトークンの取り出し
		
[使用例]

  1. 区切り文字 'a','b',または,'\n' によって文字列を分離します(C/C++)
    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
    	int i1;
    	char *pos, str1[50];
    	char *str;
    
    	i1 = 1;
    	strcpy(str1, "xyzbkxyaawwww\nccccc");
    	str = &str1[0];
    
    	printf("文字列 xyzbkxyaawwww\\nccccc を文字a,b,または,\\nで区切ります\n");
    	while ((pos = strtok(str, "ab\n")) != NULL) {
    		printf("   %d 番目の文字列は %s\n", i1, pos);
    		str = NULL;
    		i1++;
    	}
    
    	return 0;
    }
    			
    (出力)
    文字列 xyzbkxyaawwww\nccccc を文字a,b,または,\nで区切ります
       1 番目の文字列は xyz
       2 番目の文字列は kxy
       3 番目の文字列は wwww
       4 番目の文字列は ccccc
    			
  2. 区切り文字 'a','b',または,'\n' によって文字列を分離します.なお,区切り文字間にデータが存在しない場合,そのデータは無視されてしまいますので注意してください.たとえば,「 10,,5 」のようなデータをカンマで区切る場合,抽出される 1 番目のデータは 10,2 番目のデータは 5 となります( C/C++ の場合,5 は 3 番目のデータ).(Java)
    import java.io.*;
    import java.util.StringTokenizer;
    
    public class Test {
    
    	public static void main(String args[])
    	{
    		StringTokenizer str = new StringTokenizer("xyzbkxyaawwww\nccccc", "ab\n");
    		int i1 = 1;
    
    		System.out.print("文字列 xyzbkxyaawwww\\nccccc を文字a,b,または,\\nで区切ります\n");
    		while (str.hasMoreTokens()) {
    			System.out.println("   " + i1 + " 番目の文字列は " + str.nextToken());
    			i1++;
    		}
    	}
    }
    			
    (出力)
    文字列 xyzbkxyaawwww\nccccc を文字a,b,または,\nで区切ります
       1 番目の文字列は xyz
       2 番目の文字列は kxy
       3 番目の文字列は wwww
       4 番目の文字列は ccccc
    			
[参照]

strlen

菅沼ホーム 本文目次 演習問題解答例 付録目次 索引