![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_04.png?e8efa67)
No.4ベストアンサー
- 回答日時:
一般的なお話ですが、こういう問題を
・二つの文字列が一致するのに加えて、?の時の処理を考える
という方針でやるのは難しくなる傾向があります。
・二つの文字列が一致するかどうかを判断する
(一致するというのは、本当に等しいか、どちらか一方が?の時)
という方針だと、ちょっと楽です。
基本的な部分はできたということなので、その文字列を比較する部分に
if (a[i] == b[i]) ...
という感じ部分があると思います。
これは、「一文字が一致するかどうか比較する」ということなので、
「一致する」=(本当に等しいか、どちらか一方が?)
に書き換えると、
if (a[i] == b[i] || a[i] == '?' || b[i] == '?') ...
と言うことになります。
もう少し一般的には、これを、
if(isEqual(a[i], b[i])) ....
と、「等しいかどうか?」という関数を呼ぶ形にすれば、
int isEqual(char a, char b)
{
return (a == b);
}
や、
int isEqual(char a, char b)
{
if (a == b) return 1;
if (a == '?') return 1;
if (b == '?') return 1;
return 0;
}
など、いろいろな「一致」を統一的に処理することができます。
No.3
- 回答日時:
わからないけど、strcmp()に「 || *a=='?' || *b=='?'」を加えたこんな感じじゃないかなぁ。
//等しければゼロを返す
int hotcmp(char *a, char *b)
{
int judge;
while(*a && *b && *a==*b || *a=='?' || *b=='?') a++,b++;
if(*a>*b) judge=1;
else if(*a<*b) judge=-1;
else judge=0;
return judge;
}
No.2
- 回答日時:
考え方だけですが
再帰処理のロジック作って比較先・規格元のデータポインタさえ
きっちり管理してやればそれでできると思います
ロジックなんで作る人の自由ですが
変な条件で判定するよりそちらのほうがいいような気がします
サンプリ条件での流れ
1.比較データとして abc までを取得
2.比較先データ内に1のデータがあるかをチェック なければNULL あれば
比較終了位置のデータポインタを返す
3.2の戻り値がNULLなら不一致で終了 そうでないなら4へ
4.比較データのポインタを動かし次の有効データ ef を取得(1と同様)
5.比較先データ内に4のデータがあるかをチェック なければNULL あれば
比較終了位置のデータポインタを返す(2と同様)
6.3と同様
といった形で実現できそうな気がします
(1から3を再帰処理させ比較データ終わるまで実行する)
※ 細かく確認はしてませんので多少手直しが必要かとは思いますが
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java Java 南京錠 2 2023/02/04 11:46
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/08 09:05
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- C言語・C++・C# C言語の質問です。 以下の命令を実行するプログラムを作りました ①文字列aとbの長さを表示 ②aとb 1 2022/04/29 15:35
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/09 10:07
- 計算機科学 Excel ある行と列が交わったところにマークを付けるには 7 2023/01/24 08:46
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
char*を初期化したいのですが
-
C言語のintとcharの違いってな...
-
文字列の扱いについて教えてく...
-
CStringからchar*への型変換に...
-
動的メモリの初期化方法について。
-
new charとnew char[N]の違いは?
-
C言語を用いた環境変数の作成/...
-
文字列配列を動的に割り当てる...
-
C言語にて構造体のメンバがNULL...
-
小数点入りの文字列をfloat型に...
-
const char* s1とただのchar s1...
-
文字列のswap
-
C言語で文字列をかえす正しい書...
-
ASCIIコードへの変換方法
-
C言語 strstrの実装
-
csvファイルを構造体に格納した...
-
fgetc( )の戻り値はなぜ整数??
-
2次元配列の文字"列"の初期化方法
-
文字列の途中から途中までを抽出
-
ライブラリ関数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
char*を初期化したいのですが
-
CStringからchar*への型変換に...
-
C言語のintとcharの違いってな...
-
C言語にて構造体のメンバがNULL...
-
小数点入りの文字列をfloat型に...
-
strcat関数を自作したいです
-
C言語のプログラムについてです
-
const char* s1とただのchar s1...
-
DWORDとcharの変換
-
char型にint型の数値を代入する。
-
文字列の途中から途中までを抽出
-
new charとnew char[N]の違いは?
-
文字列内の数字削除
-
csvファイルをfscanfで読み込む...
-
fgetc( )の戻り値はなぜ整数??
-
char 文字列型 の表現範囲が-12...
-
fstream型オブジェクトを関数の...
-
エクセルのMID関数は、C言語では?
-
ポインタを使って回文かどうか...
-
ポインタ配列
おすすめ情報