**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
4天前关闭。
Improve this question
我的代码不适用于有多个字母的单词/猜测。我需要在不擦除的情况下执行,因为我的输出需要索引。我遍历单词,将索引添加到一个黄色或绿色的整数向量,然后将该向量添加到一个整数向量,这样我就有了每个猜测的位置。我错过了什么。
greenLetters.clear();
yellowLetters.clear();
string copy = wordle;
for(int i = 0; i < guess.length(); i++){ //check if green
if(copy[i] == guess[i]){
greenLetters.push_back(i);
copy[i] = '&';
}
}
for(int i = 0; i < guess.length(); i++){
if(copy[i] != '&'){
int index = wordle.find(guess[i]);
if(index != string::npos){
yellowLetters.push_back(i);
copy[i] = '&';
}
}
}
greens.push_back(greenLetters);
yellows.push_back(yellowLetters);
我已经尝试了很多不同的if语句,比如&& find(wordle.开始(),wordle.end(),guess[index])== wordle.end()在黄色之前,它就是不起作用。
1条答案
按热度按时间nfzehxib1#
这个问题是一个简单的输入错误。您在应该搜索
copy
的时候搜索了wordle
。这是因为您通过将copy
中的字符替换为'&'
来“擦除”这些字符,因此该变量表示仍然可用的字母池是合乎逻辑的。搜索应该是:
注意这里也使用了
auto
(或者你可以使用std::string::size_type
显式)。你不应该将std::string::find
的返回值转换为int
,编译器应该警告你这一点。为了好玩,这里有一个替代方法,对每个字符使用一个计数器,而不是依赖于一个“特殊”字符。
其工作方式是通过三遍处理。第一遍计数从计数中删除绿色字母