No.6ベストアンサー
- 回答日時:
どの程度C言語レベルをお持ちなのか不明のため、わかりきったことを説明してるかもしれません。
#4さんのおっしゃるように、関数にまかせてしまうのではなく、自力のコーディングでうまく目的を果たすことを今はめざしませんか。
scanf()で入力された二つの文字列の長さが決まっているのか任意なのかでコーディングは変わりますが、二つの文字列は必ず同じ長さであるとしましょう。
(ただし現実のアプリではそのような暗黙了解は危険です。文字長がゼロとかいろいろ例外がありえます)
二つの文字列を先頭から1文字づつ
(1)決まった文字数分比較する、あるいは別な方法としては
(2) 文字が'\0'(終端) になるまで比較してみませんか。
sasuke2006さんはfor()ループをどこで抜けて、どのタイミングで「違う」「同じ」を表示していいのかが難しいのかな。
例として必ず3文字の入力であるとして、
3文字の途中で異なっていれば 違うことを覚えておきbreak(ループを抜ける)、3文字とも同じであれば同じだということを覚えておいて、どちらだったかを最後の段階で判定してそれぞれを表示して終了してみませんか。
(1) 文字ループで比較する場合は
//forまたはwhile文をつかって、ループを抜けたあとに同じ・違うのどちらであったかを判定して結果を表示する。
f=TRUE;// 同じであると仮定しておく。これをセットしないと、文字列が同じであったときfの値は何になっているかわからないから
for ( i=0 から3文字分ループ )
{
if ( str1[i]とstr2[i]が異なれば) // *p++ などのポインタでまわす方法もありますがここでは説明省略
{ f=FALSE/*"違う"ことを覚えて*/; break/*して比較をやめる*/ }
}
//異なる・同じのいずれでもここ(for文のカッコの後)に落ちてくるので判定の上表示する
もし (TRUE)
"同じ"
else
"違う"
(2)の終端判定はまた機会があれば...
慣れてくると#5さんのようにエレガントなコーディングができるようになると思いますよ。
一応次のように出来ました。
アドバイスありがとうございました。
#include <stdio.h>
int main(void)
{
int i,j;
char str1[80],str2[80];
printf("同じ長さの文字列を2つ入力しなさい\n");
scanf("%s",str1);
scanf("%s",str2);
i=0;
j=0;
while (str1[i]!='\0') {
if (str1[i]!=str2[i]) {
j++;
}i++;
}
if (j==0) {
printf("等しい文字列を入力");
} else {
printf("異なる文字列を入力");
}
return 0;
}
No.5
- 回答日時:
#include<stdio.h>
int equals(char *s1, char *s2){
/* 文字列 s1 と s2 が等しい時 非0 そうでない時 0を返す */
while(*s1 && *s2)
if(*s1++!=*s2++)
return (0);
return (*s1==*s2);
}
void main(void){
char first[64],second[64];
printf("同じ長さの文字列を2つ入力しなさい\n\n");
scanf("%s",first);
scanf("%s",second);
if(equals(first,second))
printf("等しい文字列を入力\n");
else
printf("異なる文字列を入力\n");
}
二度も答えていただいてありがとうございます♪
でもruturn 0 までしかまだ習ってないのでプログラムの流れがいまいちわかんないです・・・。
No.4
- 回答日時:
はじめまして。
なるほど、良い課題に取り組んでいらっしゃるようですね。私も以前同じような問題で悩んだ記憶があります。いろいろと便利な関数はあるのですが。stdio.hのみでの解決をお勧めします。文字列について基礎をきちんと理解してから、もう一度チャレンジしてみてください。その上でfor文、if文を駆使すればできるはずです。それでは頑張ってください。この回答への補足
初めまして^^
考え方はなんとなく浮かんではいるんです。
char型の変数2つを宣言してその中に入力された文字を文字コードに置き換えてその数字を比較してすべてがイコールなら等しい、違うかったら異なっているって表示したらいいと思うんですがそれをプログラムでどう書けばいいのかがわかりません^^;
No.3
- 回答日時:
#include<stdio.h>
#include<string.h>
void main(void){
char first[64],second[64];
printf("同じ長さの文字列を2つ入力しなさい\n\n");
scanf("%s",first);
scanf("%s",second);
if(strcmp(first,second)==0)
printf("等しい文字列を入力\n");
else
printf("異なる文字列を入力\n");
}
ありがとうございます^^
そのプログラムを書いてコンパイルしてみたらちゃんと通って結果もオッケーでした^^
でもstdio.hだけを使って同じ結果を得られるようにしたいんですよね^^;
string.hはまだ習ってないんで・・・。
No.2
- 回答日時:
学校などの研究課題だとすれば(不明)具体的な回答するのはよろしくないと思い、考え方だけ..
(かなり具体的かつ初歩的な出力を求めてらっしゃるのでそう思ってしまいました。もしかすると二つの文字列を比較するという課題かと。)
二つの文字列バッファを用意しておいて、それを比較すればいいのでは?
forやwhile文で 文字列[i] で回すか、ポインタ++ でいくか。
文字列終端判定やループ回数は strlen()または *p=\0 でできます。
文字列の比較はプログラミングの本にも多数参考になる例題があると思います。
No.1
- 回答日時:
うーん、プログラムと離れて久しいのですが、一応
#include<stdio.h>
#include<conio.h>
void main(void){
int i,CNT;
char first[99],second[99];
printf("等しい文字列を入力しなさい\n\n");
printf("一つ目の入力\n");
scanf("%s\n",&first);
printf("二つ目の入力\n");
scanf("%s\n",&second);
for(i=0,CNT=0;i<99;i++){
if(first[i]==second[i])
CNT++;
}
if(i==CNT)
printf("等しい文字列を入力");
getch();
}
こんな感じですかねえ。
本当はポインタとか使ったほうがいいんでしょうけど、こんなところです。
内容的には条件満たしてるというだけですけど、プログラムが走らないということはないと思いますので試してみてください。
この回答への補足
コンパイラは通ったんですが求める結果にならなかったです^^;
同じ長さの文字列を入力してください、と表示した後に
ユーザーがキーボードから任意の文字列を2つ入力してその入力された文字列が等しければ「等しい文字列を入力」異なっていれば「異なった文字列を入力」と表示させたいんです。
説明足らずですいません・・・^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sscanfとscanfの違いがよくわか...
-
CStringのFindで文字列検索を行...
-
文字列中に含まれる文字の個数...
-
C言語で16進数文字列から16進数...
-
[Java]文字列分割
-
fgets関数を使用したときの文字...
-
itoaわかりません
-
C言語 空白の行(改行のみ)が...
-
ある文字列で2回目3回目に出現...
-
反転した数値を表示させるやり方
-
CStringについて
-
C++
-
単語数のカウントについて
-
strstrを利用しない文字列検索...
-
c言語のプログラミングでキーボ...
-
C言語での引数の省略方法
-
Aの値からBの値を除するとは??
-
信頼区間の1.96や1.65ってどこ...
-
マイナスからプラスへ転じた時...
-
プログラミング初心者です。 Py...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
sscanfとscanfの違いがよくわか...
-
charと%c , %s の関係について
-
strstrを利用しない文字列検索...
-
反転した数値を表示させるやり方
-
C言語のステップ数をカウントす...
-
itoaわかりません
-
fgets関数を使用したときの文字...
-
C言語 空白の行(改行のみ)が...
-
fgetsで拾われる改行文字を削除...
-
小文字のみを数える方法
-
ある文字列で2回目3回目に出現...
-
CStringについて
-
単語数のカウントについて
-
Cで「大文字、小文字の判定」は...
-
ブランクのチェック
-
C言語で16進数文字列から16進数...
-
文の意味
-
1行の文字列を時間差で表示する...
-
文字の入れ替えについて
おすすめ情報