Shammer's Philosophy

My private adversaria

String.indexOf-C言語版

HTTP Client を書く際に、URL の判定は必須。その際、: が何文字目にあるとか、? を含んでいるかとか、そういう処理をすることになる。それをするための関数を作成。Javaでいうところのjava.lang.String.indexOfといったところか。まずは、main 関数内で直接処理するバージョン。

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

int main(int argc, char * args[]){
    if ( argc != 3 ) {
	printf("Usage: %s $STRINGS $CHECK_CHAR\n", args[0]);
	return 1;
    }
    char c = args[2][0];
    int i;
    for( i = 0 ; args[1][i] != '\0' ; i++ ){
	if ( args[1][i] == c ){
	    printf("%d\n",i);
	    break;
	}
    }
    return 0;
}

これを参考に関数にする。こんな感じ。

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

int indexOf(char * str, char c){
    int i;
    for( i = 0 ; str[i] != '\0' ; i++ ){
	if( str[i] == c ){
	    return i;
	}
    }
    return -1;
}

int main(int argc, char * args[]){
    if ( argc != 3 ) {
	printf("Usage: %s $STRINGS $CHECK_CHAR\n", args[0]);
	return 1;
    }
    char c = args[2][0];
    int result = indexOf(args[1], c);
    if( result == -1 ){
	printf("%s is not contains %c.\n", args[1], c);
    }
    else {
	printf("%s is contains %c, the %c's index is %d.\n", args[1], c, c, result);
    }
    return 0;
}

実行結果。

$ ./a.out http://www.google.com :
http://www.google.com is contains :, the :'s index is 4.
$ ./a.out http://www.google.com c
http://www.google.com is contains c, the c's index is 18.
$ ./a.out http://www.google.com y
http://www.google.com is not contains y.