アットウィキロゴ

文字列操作 部分一致(strstr)

概要


前回線形探索による検索を行ったので、今回は文字列の検索(部分一致)をやってみる。
なお、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