我正在尝试对C ++入门课程进行字符串比较检查;这是一个在线课程,不幸的是,教练不是很敏感。对于当前的实验室,我需要对字符串数据执行大量操作。
目前,我正在努力检查一个字符串是否有重复的字符,如果发现重复,则删除其当前位置的重复字符,并将该字母的一个副本移到该字母的开头。串。这只是为了找到第一个双人。
我已经设置了一个基本计数器,用于遍历字符串查找匹配项,检查存储的字符(每次迭代时更新)到字符串中的当前位置。
我尝试了多个字符串函数(将当前inputString[i]
与之前的函数进行比较,存储为第二个字符串tempStore),但这些函数总是会产生char转换错误。我已尝试使用以下内容,但现在出现错误:“无效转换为'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;
}
}
}
答案 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;
}
}
}