概要
前回線形探索による検索を行ったので、今回は文字列の検索(部分一致)をやってみる。
なお、String.hに含まれるchar* strstr(char* str1,char* str2)が全く同じ挙動をする関数として用意されているが、今回は配列の練習ということで禁止にする。
関数について深く知りたかったらstrstrで各自ググること
どんなプログラムか?
○文字列を二つ用意し、scanfなどで入力する(文字列の長さは各自で決めてよい)
○文字列1の中に文字列2が含まれていた場合、その場所から文字列1を出力する
○含まれていなかった場合の動作は各自でよい
○stdio.h以外の読み込みは禁止
例)
文字列1 abcdefghijklmn
文字列2 fgh
出力) fghijklmn
実装
includeがwiki内で挙動がおかしいので省略
int main(void){
char str[20];
char kensaku[20];
int roop=0;
int roop2=0;
scanf("%s",str);
scanf("%s",kensaku);
//まず一文字目を見つける
for(roop=0;roop<sizeof(str);roop++){
//一文字目が見つかった
if(str[roop]==kensaku[0]){
//検索用文字列がある限りチェック
while(kensaku[roop2]!='\0'){
//二文字目が違ったらやり直し
if(str[roop+roop2]!=kensaku[roop2]){
roop2=0;//次のために初期化して
break; //やり直し
}else if(kensaku[roop2+1]!='\0'){ //次がNULL=文字は最後まで見終わったなら
printf("%s\n",&str[roop]);//ここで出してあげる
break;
}
roop2++;
}
}
}
getchar();
return 0;
}
最終更新:2013年12月20日 23:50