C++ 为什么程序显示字符串超出范围?
我正在做关于从字符串中删除一些单词的家庭作业。它总是显示字符串超出范围,我不知道我的代码出了什么问题 以下是我用来测试函数的字符串:C++ 为什么程序显示字符串超出范围?,c++,string,c++11,C++,String,C++11,我正在做关于从字符串中删除一些单词的家庭作业。它总是显示字符串超出范围,我不知道我的代码出了什么问题 以下是我用来测试函数的字符串: “房子旋转了两三圈,慢慢地升起” “在空中。多萝西感觉自己就像坐着气球一样。” 北风和南风在房子所在的地方会合,使它成为最美丽的地方 “气旋的确切中心。” 以下是我必须从上述字符串中删除的单词: a 一个 A 及 在 或 的 该程序在前两行运行良好,但它表明它超出了第三行的范围,我认为这是因为我必须删除第三行的最后一个单词(即“The”) int-Re
- “房子旋转了两三圈,慢慢地升起”
- “在空中。多萝西感觉自己就像坐着气球一样。”
- 北风和南风在房子所在的地方会合,使它成为最美丽的地方
- “气旋的确切中心。”
- a
- 一个
- A
- 及
- 在
- 或
- 的
int-RemoveWordFromLine(字符串和行,字符串字)
{
int no_of_occurrence=0;
int const length_of_stopword=word.length();
int const length_of_line=line.length();
对于(int j=0;j=0)和&(j+length\u of_stopword来说,当您删除一个单词时,字符串的长度会减少。但是您仍然会循环到字符串的原始长度。一个简单的解决方法是去掉length\u of_line
并只调用line.length()
任何需要长度的地方。作为示例,您需要动态检查line.length()
以考虑行字符串的转换。这解释了超出范围的原因
然而,这里还有两个问题
第一种情况是,停止字位于一行的末尾,后面没有任何空格
第二种情况是,行以停止字的字符序列开头,但以空格以外的字符序列继续(例如,“Then”而不是“The”)。在这种情况下,替换当前发生,而不应该发生
您可以按如下方式解决这两个问题:
for(int j=0 ;j<=line.length()-length_of_stopword;j++){
if ( j+length_of_stopword<=line.length()){
if ((j==0 || line[j-1]==' ') && (j+length_of_stopword==line.length()
|| line[j+length_of_stopword]==' ' ) ) {
if(line.substr(j,length_of_stopword)==word){
line.replace(j,length_of_stopword,"*");
no_of_occurence++;
}
}
}
}
for(int j=0;j你是否用铅笔和纸完成了这道题以检查你的数学?你是否用调试器完成了程序?你发现了什么?寻求调试帮助的问题(“为什么这道代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建.Advice--行。substr(j-1,1)=“”
--这是检查单个字符是否为空格的最糟糕方法之一。这可能只是行[j-1]=''
我用铅笔解决了这个问题,但我无法找出字符串超出范围的原因。字符串没有超出范围。这没有意义。字符串索引超出范围。请精确。
for(int j=0 ;j<=line.length()-length_of_stopword;j++){
if ( j+length_of_stopword<=line.length()){
if ((j==0 || line[j-1]==' ') && (j+length_of_stopword==line.length()
|| line[j+length_of_stopword]==' ' ) ) {
if(line.substr(j,length_of_stopword)==word){
line.replace(j,length_of_stopword,"*");
no_of_occurence++;
}
}
}
}