• 締切済み

C言語の配列を利用した問題が分からないんです

学校でC言語を習っているのですが、配列を利用した問題が解けません。 問題は「一致する文字列が、最初に出てくる位置を求める」というもので、穴埋め問題なのですが、どんなに考えても分かりません。 しかも、答えは教えないので自分で調べましょうと言われて困っています。 誰か分かる方、教えて下さい。 (抜かれているところをどう表現していいか分からなかったので、★マークにしています。分かりにくくてスミマセン) --------------------問題----------------------- #include<stdio.h> int main() {   char a[]="abcdefg";   char b[]="cde";   int i,j;   for(i=0; i<★; i++){     if( ★ ){       for(j=1; j<★; j++){         if(  ★  ){            break;         }       }       if(  ★  ){         break /*一致*/       }     }   }   printf("%d\n",i);   return 0; } ---------------------------------------------- 上の実行結果は、「2」と表示されるとの事でした。 どこか1つでもいいので、よろしくお願いします。

みんなの回答

  • nagare
  • ベストアンサー率33% (280/831)
回答No.2

これでどうでしょうか? (一致しなかった場合、必ず8が表示されるロジックですよね) #include<stdio.h> int main() {   char a[]="abcdefg";   char b[]="cde";   int i,j;   for(i=0; i<8; i++) { if(a[i]==b[0]) { for(j=1; j<4; j++) {         if(a[i+j]!=b[j]) {            break;         } } if('\0'==b[j]) {         break /*一致*/       }     }   }   printf("%d\n",i);   return 0; }

すると、全ての回答が全文表示されます。
  • wogota
  • ベストアンサー率42% (66/154)
回答No.1

本来は、#include <string.h>などの文が前段に必要になりますが、 次のようになると思います。 (実際なら、この処理はやばいのですけど・・・) #include<stdio.h> int main() {   char a[]="abcdefg";   char b[]="cde";   int i,j;   for(i=0; i< strlen(a); i++){     if( b[0]== a[i]){       for(j=1; j< strlen(b); j++){         if( b[j]!= a[i+j]){            break;         }       }       if( j== strlen(b)){         break; /*一致*/       }     }   }   printf("%d\n",i);   return 0; } strlen()を使わないのなら・・・'\0'の位置を見つける関数でも作るとかに なると思います。

noname#1951
質問者

補足

早速の解答、ありがとうございます。 ただ、strlenは使わない方法でという問題なんです。 上に書き忘れてて、すみませんでした。 えっと、じゃぁ、jが'\0'になったら一致しているので if文を抜けるということで合ってるでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A