1

我正在尝试对 C++ 入门课程进行字符串比较检查;这是一门在线课程,不幸的是,讲师反应不佳。对于当前的实验室,我需要对字符串数据执行一些操作。

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

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

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

inputString由用户给出,testA定义testB为 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;
        }

    }

}
4

2 回答 2

1

您的问题出在这一行:

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

std::string.insert()您在此处调用的函数具有以下签名:

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

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

 inputString.insert(0, &testB);

您也不能将普通char的 s 传递给strcmp. 你可以使用operator==, 或者,在你的情况下,operator!=虽然。

于 2012-11-13T06:33:03.600 回答
0

您使用的方法不正确,请在此处insert查看其参考以获取可能的参数。

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;
    }
    }
}
于 2012-11-13T06:49:14.483 回答