• ベストアンサー

文字列の検索と比較

文字列の検索と比較 以下の手順に従ってプログラムを作成せよ.適宜printf を利用して,入力支援(「文字列を入 力して下さい」などの画面表示)を行うこと. (1) 文字配列name[5][64] を作成する. (2) キーボードから5 人分の名前を入力し,name 配列に格納する. (3) キーボードから名前を入力し,name 配列の何番目に格納されているかを検索して表示 する.ただし,見つからなかった場合には,「見つかりません」と表示する. (4) 「quit」が入力されるまで(3)の処理を繰り返す. という処理です・・・・・。 #include <stdio.h> int main(void){ char name[5][36]; int i; for(i = 0; i < 5; i++ ){ printf("%d番目の名前を入力:", i + 1); scanf("%s", name[i] ); } printf("五人の名前を入力しました。\n"); printf("どこに格納されているか検索します。名前を入力:"); scanf("%s",name); /* ここに配列の何番目に格納されているかを検索して表示するプログラムを作成する ただし,見つからなかった場合には,「見つかりません」と表示する. 「quit」が入力されるまで処理を繰り返す処理を書く?? */ getchar(); getchar(); return(0); } 検索された文字と入力された文字が同じであることの処理はどうすればいいのでしょうか? 二つの配列を用意してループ文?でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「検索すべき文字列」は (配列として) 覚えておく必要があります. 文字列の比較ですが, 「完全に一致する」かどうかなら strcmp でできちゃいます. これならループは不要. 一般にはがんばってループで確認する必要があります. 調べれば山のように出るんじゃないかなぁ.

noname#46595
質問者

お礼

#include <stdio.h> int main(void){ char name[5][36]; char resarch[256]; int i; for(i = 0; i < 5; i++ ){ printf("%d番目の名前を入力:", i + 1); scanf("%s", name[i] ); } printf("五人の名前を入力しました。\n"); printf("どこに格納されているか検索します。\n名前を入力:"); scanf("%s",resarch); for( i = 0; resarch[i] < '\n'; i++ ){ if(name[i] == resarch); break; } printf("格納されているところは%d",name[i]); getchar(); getchar(); return(0); } これで実行してみたのですが・・・・・うまくいきませんでした・・・

noname#46595
質問者

補足

ポインタ禁止、ヘッダファイル<stdio.h>以外NGという補足を忘れていました・・・・・・。 なのでstrcmpは使えないですね・・・・。

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

> if(name[i] == resarch); 配列のname[i][0]のアドレスと、resarch[0]の先頭アドレスを比較しています。 それぞれの変数は別のアドレスに割り当てられているため この条件が成立することはあり得ません。 C言語では「文字列の比較」は==や!=では出来ません。 # ついでに、もし上記の条件が成立しても、セミコロンがありますのでナニも実行されません。 strcmp()が使用禁止だというのであれば、strcmp()と同じ処理を詩文で実装すればいいだけです。 文字列を比較するとき、貴方ならどのように比較しますか? # この比較の仕方についてはプログラムは関係ないです。 # どうやって比較しているか。その手順をプログラムに換えるだけです。

noname#46595
質問者

補足

#include <stdio.h> /*関数scompのプロトタイプ宣言*/ int scomp(char s0[], char s1[]); /*main関数内*/ int main(void){ char name[5][64]; char resarch[64]; int i; /*5人の名前入力*/ for( i = 0; i < 5; i++ ){ printf("%d番目の名前を入力:", i ); scanf("%s", name[i] ); } printf("-------五人の名前を入力しました。-------\n"); while(1){ printf("どこに格納されているか検索します。\n名前を入力:"); scanf("%s", resarch); /*quitなら終了*/ if( !scomp(resarch, "quit") ) { break; } /*検索*/ for ( i = 0; i < 5 && scomp(resarch, name[i]); i++ ) ; if( i == 5 ) { printf("見つかりません。\n"); }else{ printf("%sは配列の%d 番目に格納されています。\n",resarch, i ); } } printf("終了します。\n"); getchar(); getchar(); return(0); } /*scomp関数内*/ int scomp(char s0[], char s1[]){ int i; for(i = 0; s0[i] && s1[i] && s0[i] == s1[i]; i ++) ; return s0[i] - s1[i]; } こんな感じでしょうか?

関連するQ&A