我用 C++ 编写了一个小程序,它将一个字符串作为输入。然后它将打印字符串中的第一个非重复字符。下面是我的代码。这是 CodeEval.com 上的挑战。问题是,据我所知,代码按预期工作。但是 CodeEval.com 告诉我我的代码不正确。不幸的是,我不允许看到他们正在使用的输入,但在家里使用时,我看不出有什么问题。谁能告诉我我的代码是否有任何不符合提示的地方?
#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
string input = "";
while(getline(cin, input)){
vector<char> inputVector(input.begin(),input.end());
char firstNonRepeatedChar;
for(int i = 0; i < inputVector.size(); i++){
if((inputVector[i] != inputVector[i + 1]) && (inputVector[i] != inputVector[i - 1])){
firstNonRepeatedChar = inputVector[i];
break;
}
}
cout << firstNonRepeatedChar << "\n";
}
//system("PAUSE");
return EXIT_SUCCESS;
}
编辑: 如果有人想知道,这是给了我正确答案的代码。 Ben 帮助我意识到我没有根据提示正确回答问题。
#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int findCharInVector(vector<char>& input, char charToFind);
int main(int argc, char *argv[])
{
string input = "";
while(getline(cin, input)){
vector<char> characters(input.begin(),input.end());
char firstNonRepeatedChar;
for(int i = 0; i < characters.size(); i++){
if(!(findCharInVector(characters, characters[i]) > 1)){
firstNonRepeatedChar = characters[i];
break;
}
}
cout << firstNonRepeatedChar << "\n";
}
//system("PAUSE");
return EXIT_SUCCESS;
}
int findCharInVector(vector<char>& input, char charToFind){
int output = 0;
for(int i = 0; i < input.size(); i++){
if(input[i] == charToFind){
output++;
}
}
return output;
}
最佳答案
根据评论中的链接,非重复字符是只在字符串中出现一次的字符。这是给出的示例:
yellow // y
tooth // h
您的代码:
if((inputVector[i] != inputVector[i + 1]) && (inputVector[i] != inputVector[i - 1])){
firstNonRepeatedChar = inputVector[i];
仅检查字符是否连续重复。如果是你的想法,那么上面的例子tooth
,第一个不重复的是t
,而不是h
作为例子指定。
此外 inputVector[i] != inputVector[i - 1]
将导致 i == 0
的未定义行为。
关于c++ - CodeEval,第一个非重复字符挑战——需要解释失败原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34779286/