これはコードです:stricmp()でstringを使用せずにcharを使用できますか?
char s[101], s1[101];
cin >> s >> s1;
cout << stricmp(s, s1);
私はstd::string
としてs
とs1
を宣言しようとしたが、それは仕事をdidntの。誰かstricmp()
がchar[]
で動作する理由を説明できますか?std::string
ではありませんか?
これはコードです:stricmp()でstringを使用せずにcharを使用できますか?
char s[101], s1[101];
cin >> s >> s1;
cout << stricmp(s, s1);
私はstd::string
としてs
とs1
を宣言しようとしたが、それは仕事をdidntの。誰かstricmp()
がchar[]
で動作する理由を説明できますか?std::string
ではありませんか?
これは、stricmp()
が引数としてstd::string
の値をとらないためです。
代わりにstd::basic_string::compare()
を使用してください。
std::string s ("s");
std::string s1 ("s1");
if (s.compare(s1) != 0) // or just if (s != s1)
std::cout << s << " is not " << s1 << std::endl;
あなたは、大文字と小文字を区別しない比較が必要な場合、あなたは多分this example、または単にboost::iequals()
this other exampleのようにのようにstd::tolower()
を使用して、独自の関数を作成する必要があります。あなたは比較する前に、すべて大文字またはすべて小文字に文字列を変換する検討する必要があります
'compare'は' stricmp'が大文字と小文字を区別しないので比較しません。 – NathanOliver
また、あなたの例では 'compare'は必要でもありません。 'if(s!= s1)'と書くことができます。 – NathanOliver
@NathanOliver、提案に感謝し、サンプルに追加 – Rama
:
std::string s1;
std::string s2;
std::cin >> s1 >> s2;
std::transform(s1.begin(), s1.end(),
s1.begin(),
std::tolower);
std::transform(s2.begin(), s2.end(),
s2.begin(),
std::tolower);
if (s1 == s2)
{
std::cout << "s1 and s2 are case insensitive equal.\n";
}
else
{
std::cout << "s1 and s2 are different.\n";
}
あなたが言うとき、あなたはおそらく、もう少し具体的でなければなりません「それは動作しませんでした。」あなたは何の結果を期待していますか?どんな結果が得られていますか? – TrampolineTales
ちょうど私があなたがそれについて知らず、それが関連しているように感じるから - あなたは 'char * 'が何であるか知っていますか? –
あなたは 'stricmp(s.c_str()、s1.c_str())のように' stricmp(s、s1);を呼び出すのではなく、 'std :: string'として' s'と 's1'を宣言できます。 ; ' – Fureeish