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

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

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

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

Q&A

解決済

1回答

475閲覧

文字列比較の結果表示とスペース認識

Shotayanagi

総合スコア5

C

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

0グッド

0クリップ

投稿2020/08/06 07:24

ライブラリを使わないで文字列比較を行い同じであればSame、異なればDifferentを表示するプログラムに関してなのですが、以下のコードを実行すると結果が、逆になってしまいます(同じなのにDifferent)。またスペースが考慮されない(gggg と_ggggが同じになってしまう)のですが解決方法分かる方いらっしゃいましたらご回答お願いいたします。

#include<stdio.h> int main(void){ //変数宣言// char str1[100]; char str2[100]; int i=0; int imax=100; //文字列の入力// printf("Input str:"); scanf("%s", str1); printf("Input str:"); scanf("%s", str2); //多くとも100回ループし文字列の各要素を比較// for(i=0; i<imax; i++){ //比較するループが終端文字まで同じであればSameを表示// if(str1[i] == str2[i]=='\0'){ printf("Same \n"); break; //比較した要素が違った時点でループを終了しDifferentを表示// }else{ printf("Different \n"); break; } } return 0; }

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

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

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

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

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

guest

回答1

0

ベストアンサー

str1[i] == str2[i]=='\0'は、(str1[i] == str2[i])=='\0'と解釈されます。

で、str1[i] == str2[i]は「等しいときに0以外、等しくないときに0」となりますので、それを'\0'(0)と比較すれば、等しくないときだけ条件が成立します。

投稿2020/08/06 07:28

編集2020/08/06 07:28
maisumakun

総合スコア146018

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

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

maisumakun

2020/08/06 07:32 編集

break;が猛烈にインデントされて画面外に出ていたので、コードを読み誤りました。 (なお、「1文字の比較だけで終了する」という問題点も残存しています)
Shotayanagi

2020/08/06 07:33

なるほど。ご丁寧にありがとうございます。 無事に成功させることが出来ました!!
Shotayanagi

2020/08/06 09:40

maisumakun様のおっしゃっていた通り、一文字目の比較のみで終了してしまっていました。 どのようにすれば最後まで比較できるのか教えていただけませんでしょうか?? お手数おかけしてしまい申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問