C ++ char-by-char比较字符串

时间:2012-11-13 06:25:50

标签: c++ string comparison

我正在尝试对C ++入门课程进行字符串比较检查;这是一个在线课程,不幸的是,教练不是很敏感。对于当前的实验室,我需要对字符串数据执行大量操作。

目前,我正在努力检查一个字符串是否有重复的字符,如果发现重复,则删除其当前位置的重复字符,并将该字母的一个副本移到该字母的开头。串。这只是为了找到第一个双人。

我已经设置了一个基本计数器,用于遍历字符串查找匹配项,检查存储的字符(每次迭代时更新)到字符串中的当前位置。

我尝试了多个字符串函数(将当前inputString[i]与之前的函数进行比较,存储为第二个字符串tempStore),但这些函数总是会产生char转换错误。我已尝试使用以下内容,但现在出现错误:“无效转换为'char'到'const char*'。

inputString由用户提供,testAtestB定义为char类型

有什么想法吗?

while (opComplete == false) {

    if (i == 0) {
        i++;
    }

    else if (i == inputString.size()) {
        //Not Found
        opComplete = true;
    }

    else if (i > 0) {

        testA = inputString[i-1];
        testB = inputString[i];

        if (strcmp(testA,testB) != 0) {
            i++;
        }

        else {
            inputString.insert(0,inputString[i]);
            inputString.erase(i,1);
            inputString.erase(i-1,1);
            opComplete = true;
        }

    }

}

2 个答案:

答案 0 :(得分:1)

你的问题在这一行:

inputString.insert(0,inputString[i]);

std::string.insert()函数的调用方式如下:

string& insert ( size_t pos1, const char* s );

所以它需要一个const char指针。但是,你正在给它inputString[i]std::string.operator[]的返回值是引用(为here),因此是错误。但是,当您到达else时,您的testB变量中已经有了所需的字符,因此您只需将该行更改为

 inputString.insert(0, &testB);

您也无法将普通char传递给strcmp。您可以使用operator==,或者在您的情况下使用operator!=

答案 1 :(得分:0)

您错误地使用了insert方法,请查看其引用here以获取可能的参数。

while (opComplete == false)
{
    if (i == 0)
    i++;

    else if (i == inputString.size())
    opComplete = true;

    else if (i > 0) {
    char testA = inputString[i-1];
    char testB = inputString[i];

    if(testA!=testB)
    i++;

    else {
        inputString.insert(0,&testB); //Problem Corrected here.
        inputString.erase(i,1);
        inputString.erase(i-1,1);
        opComplete = true;
    }
    }
}