質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

2回答

823閲覧

入力後の文字列に同じ文字列がある場合「NO」と表示させたい

mkm

総合スコア15

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/07/06 11:07

任意の数の文字列を入力し、同じ文字列が無い場合は「YES」、既にある場合は「NO」と表示させたいです

#include <stdio.h> #include <string.h> int main(void){ int kaisu = 0; int hrg,i,k,h=0; char name[20][20]; //入力回数を入力 scanf("%d",&kaisu); printf("回数は%d\n",kaisu); //nameに文字列を入れていく for(i=0; i<kaisu; i++){ scanf("%s",name[i]); } //nameの中の文字列を比較 for(k=0; k<kaisu; k++){ for(h = kaisu; h>0 ;h--){ if(strcmp(name[k],name[h])!=0){    hrg=1; }else{  hrg=0; } } printf("k%dは%s\n",k,name[k]); printf("h%dは%s\n",h,name[h]); printf("hrg%d\n",hrg); if(hrg==1){ printf("NO\n"); }else if(hrg==0){ printf("YES\n"); } } return 0; }

■入力
3
aa
bb
aa

■出力
回数は3
k0はaa
h0はaa
hrg1
NO
k1はbb
h0はaa
hrg0
YES
k2はaa
h0はaa
hrg1
NO

※出力時はデバッグ用にprintfで文字列を表示させている

■期待する出力
YES
YES
NO

※同じ文字列があった場合、初めに入力されている文字列を「YES」判定
後に入力されているものを「NO」判定にしたい

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

hrg ってどういう意味ですか? flag でしょうか?
これを使わなくても書けます。
for文の終了条件 (h < k) を forループを抜けた後に使えばいいのです。

C

1#include <stdio.h> 2#include <string.h> 3 4int main(void) 5{ 6 int kaisu = 0; 7 int i, k, h = 0; // ★ hrg 削除 8 char name[20][20]; 9 10 //入力回数を入力 11 scanf("%d", &kaisu); 12 printf("回数は%d\n", kaisu); 13 14 //nameに文字列を入れていく 15 for (i = 0; i < kaisu; i++) { 16 scanf("%s", name[i]); 17 } 18 //nameの中の文字列を比較 19 for (k = 0; k < kaisu; k++) { 20 for (h = 0; h < k; h++) { // ★ これまでの値と 21 if (strcmp(name[k], name[h]) == 0) { // ★ 等しければ 22 break; // ★ ループ中断 23 } 24 } 25 printf("k%dは%s\n", k, name[k]); 26 printf("h%dは%s\n", h, name[h]); 27 28 if (h < k) { // ★ ループ中断なら 29 printf("NO\n"); 30 } else { // ★ ループ完了なら 31 printf("YES\n"); 32 } 33 } 34 return 0; 35}

投稿2020/07/09 00:49

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

フラグの初期値を0(YES)に設定。
以前に出現していないか判定し、見つかった場合1(NO)にして即ループを抜けるよう修正。
比較範囲は0~現在判定しているものの一つ前まで。

diff

1 for(k=0; k<kaisu; k++){ 2+ hrg=0; 3- for(h = kaisu; h>0 ;h--){ 4+ for (h = 0; h < k; h++) { 5- if(strcmp(name[k],name[h])!=0){ 6+ if(strcmp(name[k],name[h])==0){ 7 hrg=1; 8+ break; 9- }else{ 10- hrg=0; 11 } 12 }

投稿2020/07/06 11:31

編集2020/07/06 11:33
SHOMI

総合スコア4079

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mkm

2020/07/08 22:51

回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問