我正在尝试为介绍性 C++ 类(class)进行字符串比较检查;这是一门在线类(class),不幸的是,讲师的 react 不是很好。对于当前的实验室,我需要对字符串数据执行大量操作。
目前,我正在努力检查一个字符串是否有任何重复的字符,如果发现重复,则删除当前位置的重复字符并将该字母的一个拷贝移动到该字母的开头字符串。仅对找到的第一个 double 执行此操作。
我已经设置了一个基本计数器来遍历字符串以查找匹配项,检查存储的字符(在每次迭代时更新)到字符串中的当前位置。
我尝试了多个字符串函数(将当前的 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;
}
}
}
最佳答案
您的问题出在这一行:
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!=
。
关于C++ 逐字符比较字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13356386/