【发布时间】:2021-10-12 17:27:43
【问题描述】:
我有两个字符串:
string alphabet = "abcdefghijklmnopqrstuvwxyz";
string input = "abc";
你看i循环执行后,abc_letters的第一个字符是'a',与j循环字符input_letter相比,它执行后也是'a',即一场比赛。该字符被存储到matched 字符串中,这正是我想要的。
现在,我遇到的问题是,通过第二次执行 j 循环,abc_letters 仍然是 'a' 和 input_letter 变为 'b',字符不匹配和 @987654334 @ 存储在missing 字符串中,但'b' 是input 字符串中的一个字符,它与字符'a' 不匹配。
我需要i 循环在匹配一个字母后移动到下一个字符。换句话说,abc_letters'a' 字符是匹配的,它被存储到matched 字符串中,i 循环应该继续,abc_letters 变为'b'。如果一个字符已经匹配,我希望程序跳过它,而不是将它与input 字符串中的其他字符进行比较,这显然不会匹配!
我不希望字符 'a' 被多次比较并存储在 missing 和 matched 字符串中(如果它已经匹配)。
请帮我用 C++ 修改这段代码!
string listMissingLetters(string input)
{
string missing = "";
string matched = "";
string alphabet = "abcdefghijklmnopqrstuvwxyz";
bool letter_matched= true;//letters matched true or faulse
for (int i = 0; i < alphabet.length(); i++)
{
letter_matched = true;
char abc_letter = alphabet[i];//assigning the first character of the loops to the varible abc_letters
for (int j = 0; j < input.length(); j++) //nested loop for the user input string sorting through input string
{
char input_letter = input[j];//assigning the first character of the the input string to the varible input_letters
if (abc_letter == input_letter)
{
letter_matched = true;
matched += abc_letter;
}
else if (abc_letter != input_letter)
{
letter_matched = false;
missing += abc_letter;
}
}
}
return missing;
}
【问题讨论】:
-
你的描述对我来说不是很清楚。试着澄清一下,如果你展示一些函数的输入输出示例会更好。
-
1) 您想检查输入字符串中的所有字母是否都是字母吗?那么你就不需要外循环了;只需遍历您的输入字符串并检查每个字母是否在字母字符串中。或者2)你想检查输入字符串是否是字母字符串的子字符串?然后你就可以使用
substr了。
标签: c++ arrays string for-loop visual-c++