あなたが本当にループを必要としませんこのタスクを実行するためのif文の束は、これを行う簡単な関数を書くことができます。コードのこのビットをチェックしてください!
#include <string>
#include <iostream>
// This checkString function is all you really need!
bool checkString(const std::string& stringToCheck, const std::string& checkAgainstThis) {
if (stringToCheck.empty() || checkAgainstThis.empty()) {
// throw exception - both strings have nothing in them!
}
std::basic_string<char>::size_type firstIndex = stringToCheck.find_first_not_of(checkAgainstThis);
if (firstIndex == std::string::npos) {
return true; // Didn't find anything.
}
return false; // Found something other than.
}
// helper functions to display messages in main function - these are not required for
// the above function; just makes the main function cleaner and easier to read
void displayCheckingMessage(const std::string& a, const std::string& b) {
std::cout << "Checking string " << a << "\nto see if it contains any character other than this set: " << b << ".\n";
}
void displayResultMessage(bool condition, const std::string& str) {
if (condition) {
std::cout << "Did not find any other characters.\n\n";
} else {
std::cout << "Found something other than " << str << ".\n\n";
}
}
int main() {
std::string stringToCheck("ABCADCDABC");
const std::string checkAgainstThis("ABCD");
displayCheckingMessage(stringToCheck, checkAgainstThis);
displayResultMessage(checkString(stringToCheck, checkAgainstThis), checkAgainstThis);
stringToCheck.clear();
stringToCheck = std::string("ABCDE");
displayCheckingMessage(stringToCheck, checkAgainstThis);
displayResultMessage(checkString(stringToCheck, checkAgainstThis), checkAgainstThis);
stringToCheck.clear();
stringToCheck = std::string("AAABBBCCCDDDAAABBDDCCSSRRAASSGGSS");
displayCheckingMessage(stringToCheck, checkAgainstThis);
displayResultMessage(checkString(stringToCheck, checkAgainstThis), checkAgainstThis);
stringToCheck.clear();
stringToCheck = std::string("AAAAAAAAAAAAAAAAABBBBBBBBBBBBBAAAAAAAAAAAAAAACCCCCCCCCCCCDDDDDDDDDDD");
displayCheckingMessage(stringToCheck, checkAgainstThis);
displayResultMessage(checkString(stringToCheck, checkAgainstThis), checkAgainstThis);
stringToCheck.append("XABCD");
displayCheckingMessage(stringToCheck, checkAgainstThis);
displayResultMessage(checkString(stringToCheck, checkAgainstThis), checkAgainstThis);
// try a different set
std::cout << "\n";
const std::string checkAgainstThis2("XYZ");
displayCheckingMessage(stringToCheck, checkAgainstThis2);
displayResultMessage(checkString(stringToCheck, checkAgainstThis2), checkAgainstThis2);
stringToCheck.clear();
stringToCheck = std::string("XYZXYZXYZXYZ");
displayCheckingMessage(stringToCheck, checkAgainstThis2);
displayResultMessage(checkString(stringToCheck, checkAgainstThis2), checkAgainstThis2);
stringToCheck.append("8?#XYZXYSAZC");
std::cout << "\n" << stringToCheck << "\n";
displayCheckingMessage(stringToCheck, checkAgainstThis2);
displayResultMessage(checkString(stringToCheck, checkAgainstThis2), checkAgainstThis2);
return 0;
}
は、この単純な関数を使用すると、それはあなたが2番目の文字列からに対してチェックしたい文字のセット以外の文字が含まれているかどうかを確認するために、任意の最初の文字列を確認することができます。これにより、if文の条件文で文字をハードコードする必要がなくなります。これはまた、任意の文字列を決定された文字のセットと比較する追加のボーナスを与えます。
if/elseがループ内で発生しています。最初の反復で常にtrueまたはfalseを返します。ループの完了後にfalseを返すことができます。 –