無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
blue

無題

#1

投稿記事 by blue » 15年前

文字列xに文字列yが含まれるかどうかを判定する関数str_comp(char [/url], char [/url])を作成せよ.この関数を用いて、入力されたひと つめの文字列にふたつめの文字列が含まれているかを判定するプログラムを作成せ よ。

% ./compare
文字列x (64字まで)? University
文字列y (64字まで)? Univ
"Ritsumeikan-University"に"Univ"は含まれます.

% ./compare
文字列x (64字まで)? University
文字列y (64字まで)? city
"University"に"city"は含まれません.

というもんだいで自分が書いたソースをコンパイルして、実行して、ははじめが「University」でその次がsityで入力すると含まれませんと表示されます。しかし、ほかにいろいろ実行してためしていたらうまくいったのもあるので少しプログラミングが間違っているのではないかと思いどこを直せばよいか質問したいと思います。

自分の書いたソース↓
#include<stdio.h>
# define SIZE 64

int str_comp(char x[/url],char y[/url]);

int main(void){
int i,j;
char buf[SIZE],don[SIZE];
printf("文字列x (64字まで)? ");
fgets(buf,SIZE,stdin);
printf("文字列y (64字まで)? ");
fgets(don,SIZE,stdin);
//bufをポインタを動かす
for(i=0 ;i< SIZE ;i++){
if(buf=='\0'){
break;
}
else if(buf == '\n'){
buf='\0';
}
}

for(j=0 ;j<SIZE ;j++){
if(don[j]=='\0')
break;
else if(don[j]=='\n')
don[j] = '\0';
}


j = str_comp(buf,don);

if(j==1){
printf("%sに%sはふくまれています\n",buf,don);
}

else{
printf("%sに%sはふくまれていません\n",buf,don);
}
}
int str_comp(char x[/url],char y[/url]){
int i,j;
i = 0;
j=0;
for(;;){
if(x == y[j]){
i++;
j++;
if(x != '\0' || y[j] != '\0'){
return 1;
break;
}
else if(x != y[j]){
break;
}
}

else{
i++;
break;
}
}
return 0;
}

ookami

Re:無題

#2

投稿記事 by ookami » 15年前

使ってはいけない関数などはありますか?

fatens

Re:無題

#3

投稿記事 by fatens » 15年前

「文字列xのi番目からの文字の並びが文字列yの文字の並びと等しいか」
について調べれば良いので、

文字列xの終端まで、先頭を1文字ずつずらして調べていく
  文字列yの各文字の並びが文字列xの先頭からの文字の並びに等しい間繰り返す
  ループから抜けたとき文字列yが終端に達していたら1を返す
含まれていなかったので0を返す

のような感じで判定できると思います。


文章で書くと逆に分かりにくいですかね……

アビゲイル

Re:無題

#4

投稿記事 by アビゲイル » 15年前

この際breakをすべて消して、一致したらreturn 1、一致しなかったらreturn 0
にして見てはどうですか?
今のままだと最初の1文字しか判定してないように見えます。

#念の為 breakをすべて消して→str_comp関数内のことです 画像

パコネコ

Re:無題

#5

投稿記事 by パコネコ » 15年前

同じか?ではなく含まれているかですよね。
でしたら、jの値を0に戻す作業はいらないのですか?
必要だと思うのですが…
breakはいらない…ですね。

=====
ついでに
成功した時の条件は
if(y[j]=='\0')
return ある;
失敗は
if(x=='\0')
return ない;
という感じでもいいと思います。
(「ある」と「ない」は0と1どっちかわかんなかったから…)
画像

閉鎖

“C言語何でも質問掲示板” へ戻る