// 自作文字列比較関数 int my_strcmp(const char* s1, const char* s2) { // 先頭から走査して差があればループ終了 for (; *s1 == *s2; s1++, s2++) { // 終了前に終端文字が見つかったら差分なし if (*s1 == '\0') { return 0; } } return *s1 > * s2 ? 1 : -1; }
のプログラムを使い文字列の一致するかどうかの処理を行おうとしました。
ですが、文字列一つならば判断できるのですが、文字列が2つ以上になると判断ができなくなります。
というのもif文で言う二つ目の好きですという単語は一つ目の単語の一致の時に関数が終了してしまうため2つ目の文字列の一致に行かないためではなないかと考えています。なので、入力した文字列をif文で書いた文字列すべてと一致するまでループしたいのですが、どのように 自作文字列比較関数を書き直せばいいでしょうか?
今現在のプログラムです。
コード
あの後、他の自作関数で書いてみたのですが、
なぜか映画、好きですで違う返事が返ってきます。
何がダメなのでしょうか?デバッグでは値に問題はありませんでした。
他の自作関数でのコード
今現在のコードを正しく書き直したコードです。
if (strstr(input.c_str(), "映画") == 0&& strstr(input.c_str(), "好きです") == 0) の部分が==0と書いてしまったため映画、好きです、等しくない、すなわち入ってないときが真になってしまうので正しく動いていませんでした。なので if (strstr(input.c_str(), "映画")&& strstr(input.c_str(), "好きです")) と直しました。
https://pastebin.com/zhWJjWGv
他の自作関数での正しく書いたコードです。
他の自作関数を以下のように修正しました。
int my_str2(const char* s1, const char* s2)//ここで入力した文字列と用意された文字列を引数として扱う。 { //s1, s2を比較する関数を使うためだけにs2の文字列のサイズが必要なので、変数aに用意した文字列の情報s2を文字列の長さを測るための関数strlenに引数として渡す。 const size_t a = strlen(s2); //無限ループする。 for (;;) { //関数memcmpの返り値が0の時は一致した時なので、==0とする。 if (memcmp(s1, s2, a) == 0) return 1;//入力した文字列にい指定された文字列が入っていた場合は1を返すように設定した。 //入力した文字列が最後の文字まで到達した場合は一致する文字列がないということなので0を返すようにした。 else if (*s1 == '\0') return 0;//入っていなかった //文字列が一致した場合でも一致する文字列がない場合でも入力した文字列の一文字分の文字コードのバイト数?が繰り上がるようにした。 else ++s1; } }
ちなみに、あの後細かくコメントを書いたのですが、GetKeyInputString(buffer, InputHandle);に関するコメントは以下のように書いて合っていますでしょうか?
GetKeyInputString(buffer, InputHandle);//ここでInputHandleに入力された文字列の数値をGetKeyInputStringにより文字コードに変換したものを上でchar型で定義したbufferに入れる。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/21 08:02
2020/06/21 08:40
2020/06/21 11:20
2020/06/21 11:56
2020/06/21 13:37
2020/06/21 20:41
2020/06/22 13:57
2020/06/22 21:08