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.