strrchr(C/C++), lastIndexOf(Java)

[機能]

  文字列の中から指定された文字を後方から探索します.文字に,NULL 文字( '\0' )も指定できます.文字が見つかった場合は,最初に見つかった位置へのポインタを返し,見つからなかった場合は,NULL を返します.引数の文字列には,NULL 文字( '\0' )が入っているものと想定しています.

  Java の場合は,String クラスのメソッド lastIndexOf を使用します.見つかるとその場所,また,見つからない場合は -1 を返します.

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

	#include <string.h>

	char *strrchr(conts char *str, int c)
		str : 文字列
		c   : 探索する文字

( Java の場合: String クラスのメソッド)

	int lastIndexOf(int c)
	int lastIndexOf(int c, int start)
		c     : 探索する文字
		start : 探索を開始する場所
		
[使用例]

  1. 文字や文字列の探索方法の比較(C/C++)
    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
    	long k;
    	int i;
    	char *pos;
    	char *str = "xybaccakmccazabc";
    
    	printf("対象とする文字列  %s\n", str);
    /*
    		 文字の探索
    */
    	pos = strchr(str, 'a');
    	k   = (long)pos - (long)str + 1;
    	printf("   文字の探索\n");
    	printf("      文字 a は最初から %ld 文字目にあります\n", k);
    /*
    		 文字の後方からの探索
    */
    	pos = strrchr(str, 'a');
    	k   = (long)pos - (long)str + 1;
    	printf("   文字の後方からの探索\n");
    	printf("      文字 a は最初から %ld 文字目にあります\n", k);
    /*
    		 文字群の中のどれかの文字の探索
    */
    	pos = strpbrk(str, "uvwk");
    	k   = (long)pos - (long)str + 1;
    	printf("   文字群「uvwk」に含まれる文字の探索\n");
    	printf("      文字 %c が最初から %ld 文字目にあります\n", *pos, k);
    /*
    		 文字列の探索
    */
    	pos = strstr(str, "cc");
    	k   = (long)pos - (long)str + 1;
    	printf("   文字列の探索\n");
    	printf("      文字列 cc は最初から %ld 文字目にあります\n", k);
    /*
    		 指定された文字群以外からなる文字列の長さ
    */
    	i = strcspn(str, "abc");
    	printf("   文字群「abc」以外からなる文字列の長さ\n");
    	printf("      最初から %d 文字目までに a,b,c の文字は含まれません\n", i);
    /*
    		 指定された文字群からなる文字列の長さ
    */
    	i = strspn(str, "abcxy");
    	printf("   文字群「abcxy」からなる文字列の長さ\n");
    	printf("      最初から %d 文字目までが a,b,c,x,y でなっています\n", i);
    
    	return 0;
    }
    			
    (出力)
    対象とする文字列  xybaccakmccazabc
       文字の探索
          文字 a は最初から 4 文字目にあります
       文字の後方からの探索
          文字 a は最初から 14 文字目にあります
       文字群「uvwk」に含まれる文字の探索
          文字 k が最初から 8 文字目にあります
       文字列の探索
          文字列 cc は最初から 5 文字目にあります
       文字群「abc」以外からなる文字列の長さ
          最初から 2 文字目までに a,b,c の文字は含まれません
       文字群「abcxy」からなる文字列の長さ
          最初から 7 文字目までが a,b,c,x,y でなっています
    			
  2. 文字や文字列の探索方法の比較(Java)
    import java.io.*;
    
    public class Test {
    
    	public static void main(String args[]) throws IOException
    	{
    		int k;
    		String str = "xybaccakmccazabc";
    
    		System.out.println("対象とする文字列  " + str);
    	/*
    			 文字の探索
    	*/
    		System.out.print("   文字の探索\n");
    		k = str.indexOf('a') + 1;
    		System.out.print("      文字 a は最初から " + k + " 文字目にあります\n");
    		k = str.indexOf('a', 4) + 1;
    		System.out.print("      文字 a は最初から " + k + " 文字目にあります(開始位置:4)\n");
    	/*
    			 文字の後方からの探索
    	*/
    		System.out.print("   文字の後方からの探索\n");
    		k = str.lastIndexOf('a') + 1;
    		System.out.print("      文字 a は最初から " + k + " 文字目にあります\n");
    		k = str.lastIndexOf('a', 4) + 1;
    		System.out.print("      文字 a は最初から " + k + " 文字目にあります(開始位置:4)\n");
    	/*
    			 文字列の探索
    	*/
    		System.out.print("   文字列の探索\n");
    		k = str.indexOf("cc") + 1;
    		System.out.print("      文字列 cc は最初から " + k + " 文字目にあります\n");
    		k = str.indexOf("cc", 6) + 1;
    		System.out.print("      文字列 cc は最初から " + k + " 文字目にあります(開始位置:6)\n");
    	/*
    			 文字列の後方からの探索
    	*/
    		System.out.print("   文字列の後方からの探索\n");
    		k = str.lastIndexOf("cc") + 1;
    		System.out.print("      文字列 cc は最初から " + k + " 文字目にあります\n");
    		k = str.lastIndexOf("cc", 6) + 1;
    		System.out.print("      文字列 cc は最初から " + k + " 文字目にあります(開始位置:6)\n");
    	}
    }
    			
    (出力)
    対象とする文字列  xybaccakmccazabc
       文字の探索
          文字 a は最初から 4 文字目にあります
          文字 a は最初から 7 文字目にあります(開始位置:4)
       文字の後方からの探索
          文字 a は最初から 14 文字目にあります
          文字 a は最初から 4 文字目にあります(開始位置:4)
       文字列の探索
          文字列 cc は最初から 5 文字目にあります
          文字列 cc は最初から 10 文字目にあります(開始位置:6)
       文字列の後方からの探索
          文字列 cc は最初から 10 文字目にあります
          文字列 cc は最初から 5 文字目にあります(開始位置:6)
    			
[参照]

strchr, strstr, strspn, strcspn, strpbrk, strlen

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