对于任何可能的重复问题,请提前道歉。我一直在谷歌搜索我的编译器错误的解决方案,一个星期以来,从这里的各种答案中尝试了不同的解决方法,但我不断收到一些错误。
我目前正在学习 C++,试图构建一个程序来处理元音/辅音计数、字母删除等基本内容。在我进入 自定义字母 删除部分之前,一切正常。基本上,使用字符函数(据我所知)几乎不可能做到这一点,而转换为字符串似乎会产生其他类型的错误。
这是我不断收到错误的代码片段:
if (strcmp (service, key4) ==0)
{
string str(s);
cout<<endl<<"Please insert the letter you would like removed from your "<<phrasal<<":"<<endl;
cin>>letterToRemove;
s.erase(remove(s.begin(), s.end(),letterToRemove), s.end());
cout<<endl<<s<< "\n"<<endl;
}
这是我使用的初始化变量:
int main()
{
char s[1000], phrasal[10], service[50], key1[] = "1", key2[] = "2", key3[] = "3", key4[] = "4", key5[] = "5", key6[] = "6", key0[] = "0", *p, letterToRemove;
int vowel=0, vowel2=0, consonant=0, consonant2=0, b, i, j, k, phrase=0, minusOne, letter, idxToDel;
void pop_back();
char *s_bin;
如您所见,原来 的 ’s’ 是一个 char 数组。在第一个代码示例中,我尝试将其转换为字符串数组( string str(s) ),但这会导致以下编译错误:
- 错误:在 ’s’ 中请求成员 ‘erase’,它是非类类型 ‘char[1000]’
- 错误:在 ’s’ 中请求成员 ‘begin’,它是非类类型 ‘char[1000]’
- 错误:在“s”中请求成员“end”,它是非类类型“char[1000]”
- 错误:在“s”中请求成员“end”,它是非类类型“char[1000]”
我尝试过的另一个解决方法是:
if(strcmp(service, key4)==0)
{std::string s(s);
cout<<endl<<"Please insert the letter you would like removed from your "<<phrasal<<":"<<endl;
cin>>letterToRemove;
s.erase(remove(s.begin(), s.end(),letterToRemove), s.end());
cout<<endl<<s<< "\n"<<endl;
}
现在这是有趣的部分,我没有收到任何错误,但是一旦我选择 自定义字母删除 功能,调试就会崩溃。它是这样说的:
任何帮助将不胜感激,现在已经坚持了一周!
PS如果我或版主在回答完这个问题后删除这个问题可以吗?我很确定我不是第一个提出这个问题的人,但是,如前所述,即使在遵循类似问题的答案之后,我也会不断收到这些错误。
原文由 Eludium 发布,翻译遵循 CC BY-SA 4.0 许可协议
对于 char 数组,您必须使用
std::remove
而不是erase
,并手动插入空终止符: