c++ - CodeEval,第一个非重复字符挑战——需要解释失败原因

标签 c++

我用 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/

相关文章:

c++ - 具有 C++11 构造的映射函数

c++ - 为什么我在 __int64 变量上 & (anding) 位时得到奇怪的结果?

c++ - 模板类中构造函数的语法

c++ - 如何搜索确切的单词?

c++ - 我如何计算这个函数的运行时间?

c++ - 我将如何为 C++ 项目使用 Python 类定义

c++ - 在另一个静态库中链接静态库

c++ - 绑定(bind)元函数 : accept both types and template template parameters (accept anything)

c++ - 指向成员的指针集

c++ - SFML 编译库 GLEW