超C言語初心者です。strcmpを使わずに文字列を比較する文を書いているのですが、途中でわからなくなりました。
宜しければご指摘お願いします。
#include<stdio.h>
int main(){
char cp1[100],char2[100];
int i=0;
int j=0
printf("1つ目の文字列:\n");
scanf("%s\n",cp1);
printf("2つ目の文字列:\n");
scanf("%s\n",cp2);
while(cp1[i]=='\0' || cp2[j]=='\0'||cp1[i]==cp2[j]=='\0'){
cp1[i++];
cp2[j++];
}
if(cp[i]==cp2[j]=='\0'){
printf("同じ文字数\n);
}else if (cp1[i]=='\0'&&cp2[j]!='\0'){
printf("2つ目の方が大きい\n);
}else if (cp2[j]=='\0'&&cp1[i]!='\0'){
printf("1つ目の方が大きい\n);
}
exit(0);
}
と今書いています。間違いだらけでしょうが、お願いします!!
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
> 「一般的な」と書いたのは、私がC言語の数多くある処理系に精通していないため、本当にそうなのか断定することが出来なかったからです。
標準規格では可能です。
非標準処理系の中にはできないものもあるかもしれませんが、それらは「一般的な」処理系ではありません。
No.7
- 回答日時:
連投ですみませんが、語弊を招きそうなので、更に補足させてください。
「一般的な」と書いたのは、私がC言語の数多くある処理系に精通していないため、本当にそうなのか断定することが出来なかったからです。
それ以外の他意はありません。
ご存じの方がいれば、補足をお願いします。
#chianti1986さん、話の本筋と逸れてすみません。
No.5
- 回答日時:
>まず `cp1[i]==cp2[j]=='\0'` なんて書き方は出来ません。
LOHAさん嘘を書かないでください。
書けます、文法上合法です。意味はhitomuraさんの書いたとおり「(cp1[i]==cp2[j])=='\0'」の意味で、「(cp1[i]!=cp2[j])==0」、「!(cp1[i]!=cp2[j])」、「(cp1[i]!=cp2[j])」と同じになり今回のプログラムでは意味が違いますが、書けることは書けます。
No.3
- 回答日時:
まず `cp1[i]==cp2[j]=='\0'` なんて書き方は出来ません。
ちゃんと `cp1[i] == '\0' && cp2[j] == '\0'` と書きましょう。
>while(cp1[i]=='\0' || cp2[j]=='\0'||cp1[i]==cp2[j]=='\0'){
比較が逆です。
比較した結果がtrueの時にループが回ることを思い出してみてください。
>cp1[i++];
>cp2[j++];
配列の要素番号の部分でインクリメントするのはおかしいです。
普通に i++; j++; でよいでしょう。
>if(cp[i]==cp2[j]=='\0'){
>printf("同じ文字数\n);
>}else if (cp1[i]=='\0'&&cp2[j]!='\0'){
>printf("2つ目の方が大きい\n);
>}else if (cp2[j]=='\0'&&cp1[i]!='\0'){
>printf("1つ目の方が大きい\n);
>}
だと、同じ長さの時が抑えられていません。
それと、アルゴリズムも微妙ですね。
while (cp1[i] != '\0' || cp2[i] != '\0')
++i;
として、iの位置の文字(char)を(値として)比較してみたらどうでしょう?
後はじっくり考えてみてください。
No.1
- 回答日時:
1.
while文はカッコ内の条件が成立「している間」処理を繰り返します。成立「するようになるまで」ではありません。
なお、C言語では「条件が成立『するようになるまで』繰り返す構文」はありません。そのような処理が必要になった場合はその条件の否定が成立している間処理を繰り返すように書きます。
2.
演算子の結合順の関係上、
cp1[i]==cp2[j]=='\0'
という式は
(cp1[i]==cp2[j])=='\0'
と解釈されます。それは多分あなたの望む結果とならないでしょう。
というか、その前のほうで2文字列が終端に来たことをチェックしているのだから、ここでは別のことをチェックすべきです。
3.
cp1[i++];
cp2[j++];
という文は確かにあなたの想定どおり動きます。しかし、
i++;
j++;
で十分です。
4.
途中で文字列が違っていた場合(たとえば"abc"と"abz")の処理が抜けています。
5.
変数jは不要にできます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- 中学校 CP室 3 2023/02/10 23:33
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- 電気工事士 【電気設備設計士さんに液晶パネルタイプの電力量計に関する質問です】キュービクル内の液晶 1 2023/07/24 18:16
- pixiv 腐女子の方に質問です(できれば二次創作される方) 2 2022/06/20 04:47
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
エラーの意味は? Lvalue required
C言語・C++・C#
-
構造体のメンバをfor文で回したい
C言語・C++・C#
-
C言語のポインターに関する警告
C言語・C++・C#
-
-
4
strstrを利用しない文字列検索について
C言語・C++・C#
-
5
再起呼び出しの回数をカウントするプログラム
C言語・C++・C#
-
6
(C言語)関数の中で文字列比較できない。
C言語・C++・C#
-
7
関数から配列を返すには?
C言語・C++・C#
-
8
C言語 exitの使い方
C言語・C++・C#
-
9
charでの計算?
C言語・C++・C#
-
10
scanf(%s", buf);でスペースを含んだ文字"
C言語・C++・C#
-
11
Run-Time Check Failure #3というエラーが出ます。
C言語・C++・C#
-
12
ファイルから読み込んだデータを構造体に格納できますか?
C言語・C++・C#
-
13
数字以外が入力されたらエラー文を出したい。
C言語・C++・C#
-
14
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
15
doubleの変数にintとintの割り算の結果を代入するとき
C言語・C++・C#
-
16
float型とdouble型の変数の違いを教えてほしいです
C言語・C++・C#
-
17
C言語初心者の質問失礼します。
C言語・C++・C#
-
18
c言語で任意のファイルから読み込んだ単語の数をカウントする
C言語・C++・C#
-
19
c言語 構造体
C言語・C++・C#
-
20
16進数を10進数に簡単に変換する関数は?
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10個出力で改行したいのですが...
-
printf で二進表示を行いたい。
-
コマンドプロンプトがすぐ消える
-
C言語で四則演算を使って結果が...
-
CTRL+Dでループを抜けるには
-
switch分のケースを範囲数?に...
-
文字と数字の判定について
-
unsigned int型について
-
C言語で、「自然数nを入力し、n...
-
getcharの連続について
-
入力したお金の金額からお札の...
-
8人分のテストの点数を入力し、...
-
int型 00 を表示するのに0とな...
-
C言語で 選択肢: |?| |?| |?| 1...
-
数当てゲームを作っているのですが
-
【プログラム】2の倍数で表示非...
-
アドレスの比較について
-
C言語プログラミングで「コマン...
-
C言語の数値入力
-
改行について 1行に何個かづ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
既約分数の表示プログラム
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
printf( " %2d", p * q );
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
%P と %X の違い
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
cshの文字列操作(0埋め)
-
万年カレンダーのC言語プログラ...
-
コマンドラインに出力した文字...
-
scanfに文字が入力されたときに...
-
ホームページをC言語で作りたい...
-
改行について 1行に何個かづ...
-
コンパイルエラーについて
-
台形の面積を求めるプログラム
-
なぜgccはstdio.hをインクルー...
おすすめ情報