![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
超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も見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
C言語のポインターに関する警告
C言語・C++・C#
-
構造体のメンバをfor文で回したい
C言語・C++・C#
-
数字以外が入力されたらエラー文を出したい。
C言語・C++・C#
-
-
4
strstrを利用しない文字列検索について
C言語・C++・C#
-
5
エラーの意味は? Lvalue required
C言語・C++・C#
-
6
charでの計算?
C言語・C++・C#
-
7
Run-Time Check Failure #3というエラーが出ます。
C言語・C++・C#
-
8
ファイルから読み込んだデータを構造体に格納できますか?
C言語・C++・C#
-
9
先頭アドレスとは何ですか?
C言語・C++・C#
-
10
(C言語)関数の中で文字列比較できない。
C言語・C++・C#
-
11
C言語 名前順にソートする方法
C言語・C++・C#
-
12
C言語の勉強しています。すみませんが、助けてください。
C言語・C++・C#
-
13
C言語の入力した文字を反転させるプログラミングの仕方が分かりません。
Ruby
-
14
sscanfとscanfの違いがよくわからないのですが、簡単に優しく教えて下さい。 お願い致します。
C言語・C++・C#
-
15
関数から配列を返すには?
C言語・C++・C#
-
16
C言語 exitの使い方
C言語・C++・C#
-
17
scanf(%s", buf);でスペースを含んだ文字"
C言語・C++・C#
-
18
再起呼び出しの回数をカウントするプログラム
C言語・C++・C#
-
19
char str[256]の256の意味は?
C言語・C++・C#
-
20
printf による16進表示について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 プログラミング
-
printf で二進表示を行いたい。
-
unsigned int型について
-
scanfに文字が入力されたときに...
-
ヌメロンの対戦相手
-
C言語でマウス入力(クリックや...
-
コマンドラインに出力した文字...
-
円の面積を求めるプログラミン...
-
C言語についてです学籍番号、名...
-
4の倍数を論理演算で表す。。
-
printfのコードは?
-
三角形の判別
-
CPU温度・負荷等を調べるには
-
C言語 関数
-
【C言語教えてください】sin波...
-
LU分解法のピボット選択機能実...
-
cshの文字列操作(0埋め)
-
strcmp
-
パスカルの三角形についてのCプ...
-
プログラム(C言語)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
【C言語教えてください】sin波...
-
printf で二進表示を行いたい。
-
c言語でAからZまでを表示する...
-
コマンドラインに出力した文字...
-
strcmp
-
4の倍数を論理演算で表す。。
-
C言語での、年複利の計算方法...
-
C言語 プログラミング
-
scanfに文字が入力されたときに...
-
hit&bolwのプログラミングがで...
-
%P と %X の違い
-
unsigned int型について
-
printf( " %2d", p * q );
-
cshの文字列操作(0埋め)
-
改行について 1行に何個かづ...
-
8人分のテストの点数を入力し、...
-
入力したお金の金額からお札の...
-
三角形の判別
-
テキストカーソル位置の取得
おすすめ情報