// 自作文字列比較関数
int my_strcmp(const char* s1, const char* s2)
{
// 先頭から走査して差があればループ終了
for(; *s1 == *s2; s1++, s2++)
{
// 終了前に終端文字が見つかったら差分なし
if(*s1 == '\0')
{
return 0;
}
}
return *s1 >*s2 ? 1 : -1;
}
というプログラムにおいて、正しく動く事は確認できました。しかし、
s1とs2が等しい時のif文や処理がどこにかいてあるのかわからないです。
どこに書いているのでしょうか?
また、s1とs2が一致したとしても関数が終了しないようにするにはどのように書き直せばよいでしょうか?
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
この関数の戻り値は以下の三つしかありません。
①s1がs2と等しいか短い場合に0
②相違有りでs1側の文字コードが大きい場合に1
③相違有りでs1側の文字コードが小さい場合に-1
s1="ありがとう"
s2="ありがとうございます"
この場合0が返りますが等しくないですよね。
つまりこの関数は前方一致を検出したいだけ?
「s1とs2が一致したとしても関数が終了しない」って、終了条件が無いとプログラムがハングアップしますけど。
何がしたいのでしょう?
No.2
- 回答日時:
「正しく動く事は確認できました。
」ってことは、No.1 が書いている仕様で意図どおりだってことでしょうか?
そうではなくて、const char* s1 と const char* s2 の指す
文字列が一致したときに 0 を返す関数にしたいなら、
if(*s1 == '\0') を if(*s1 == '\0' && *s2 == '\0') に変えたらどうでしょう。
s1 と s2 が等しい時の if 文や処理をどこにも書いてなかったから
こうなったのです。
「s1とs2が一致したとしても関数が終了しないようにする」というのが
関数を終了する前にまだ何か作業したいという意味であれば、
return 0; の直前にその作業を書けばよいと思います。
No.3
- 回答日時:
>s1とs2が等しい時のif文や処理がどこにかいてあるのかわからないです。
「s1とs2が等しい時」はfor文の中ですね
>また、s1とs2が一致したとしても関数が終了しないようにするにはどのように書き直せばよいでしょうか?
return 0;
で関数を終了しているので、ここを書き換えれば良いのでは?
>s1="ありがとう"
>s2="ありがとうございます"
>この場合0が返りますが等しくないですよね。
*s1 == '\0'のときはforループの外に出ているので0は返らないとおもいますけど・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- 数学 数学の質問です。 kを正の実数とする。 点Pは△ABCの内部にあり、 kAP+5BP+3CP = 0 2 2023/07/03 21:24
- 工学 電気回路の2端子対回路 (1)スイッチS1のみが開いているときの電流I1を求めよ。 (2)スイッチS 4 2023/05/29 16:40
- 統計学 t値の計算方法 1 2022/11/29 18:37
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Visual Basic(VBA) 該当セルに行替えを含むデータを命令文に入れて、2行に表示したい。 5 2023/07/20 11:51
- 工学 回路の勉強をしています。添付の説明で一点理解できないため教えてください。スイッチS1を閉じて定常状態 1 2022/10/24 15:58
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
右ビットシフト
-
Linux Cプログラミングを学ぶた...
-
プログラミングについて。 1つ...
-
[C言語]fputsとfprintfの違い
-
こんなことてしますか??
-
Notepad++の関数リスト表示の変...
-
gccを行ってもexeファイルが生...
-
どちのほうがすきですか?
-
Notepad++の関数リスト表示でC...
-
VisualStudio2022でC言語プログ...
-
C言語をコンパイルするとコンピ...
-
Stuck
-
VisualStudioで、コードを印刷...
-
プログラミング言語の制作方法...
-
mallocについて
-
あなたは、Excelはどうやって学...
-
Linuxでの開発環境構築や設定の...
-
chatgptでつくってもらったコー...
-
c言語
-
License='MIT' ってなんでmitな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで階乗を求めるプログラ...
-
COBOLのIFの入れ子について
-
fortranのif文で・・・
-
式?文?節?
-
二つの図形を画面上で同時に動...
-
GoTo文について
-
プログラミングの問題です。
-
javascript初心者です
-
苦しんで覚えるc言語について
-
システムエンジニアの適正について
-
小文字wと大文字Wの区別
-
Ruby / passenger のインストー...
-
プログラミング講師はまだ需要...
-
初心者 パイソンプログラム
-
CかC++どちらを覚えるべきですか?
-
Ruby interpreter (CUI) 2.2.3 ...
-
RubyでNo such file or directo...
-
web上のhtmlファイルから文字デ...
-
Rubyでpdfファイルを読み込む方法
-
プログラミング言語で大文字と...
おすすめ情報