为啥我不能在 C++ 中使用 str.erase(str.begin() + index) 擦除字符串中的字符?
Posted
技术标签:
【中文标题】为啥我不能在 C++ 中使用 str.erase(str.begin() + index) 擦除字符串中的字符?【英文标题】:Why can't I erase characters in a string using str.erase(str.begin() + index) in C++?为什么我不能在 C++ 中使用 str.erase(str.begin() + index) 擦除字符串中的字符? 【发布时间】:2014-03-11 05:02:40 【问题描述】:split 功能是擦除字符串中除字母和空格以外的字符。然后将其拆分为单词并将它们存储在向量中。 像这样 输入:apple isnot4me 输出:“apple”“isnotme”
但phase.erase(phase.begin() + index);
似乎不起作用。
这是我的 C++ 程序
#include <iostream>
#include <string>
#include <vector>
using namespace std;
const string ALPHABET("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ");
void split(vector<string> &words, const string &phase)
int pos = 0, size = 0, index = 0;
//erace the chracters except for letters and spaces
while((index = phase.find_first_not_of(ALPHABET, pos)) != string::npos)
phase.erase(phase.begin() + index);
pos = index;
pos = 0, size = 0, index = 0; //initialize again
while((index = phase.find_first_of(" ", pos)) != string::npos)
size = index - pos;
words.push_back(phase.substr(pos, size));
pos = index + 1;
//add the last word(if exists) to the vector words
size = phase.length() - pos;
words.push_back(phase.substr(pos, size));
int main()
vector<string> words;
string str;
cin >> str;
split(words, str);
int size = words.size();
for(int i = 0; i < size; i++)
cout << "\"" << words[i] << "\"" << ' ';
cout << endl;
return 0;
但是,当我在另一个程序中独立尝试 str.erase(str.begin() + index) 时, 像这样
#include <iostream>
#include <vector>
using namespace std;
int main()
string str("Hello world!");
int index = str.find_first_of(" ", 0);
str.erase(str.begin() + index);
cout << str << endl;
return 0;
而且它有效!
【问题讨论】:
所示代码无法编译。phase
作为 const&
传入。因此,您无法修改它。或者这就是你所说的“不起作用”?
谢谢!!!就是这样!!调试几个小时!!
kexanie:你不能真正调试不能编译的东西
糟糕...谢谢纠正。
@kexanie 下次,请确保具体说明“不起作用”的内容。编译错误、链接器错误、输出不符合预期等
【参考方案1】:
您将相位作为 const 字符串传递:
void split(vector<string> &words, const string &phase)
令人惊讶的是你可以编译因为erase不是const...(不应该是)
【讨论】:
以上是关于为啥我不能在 C++ 中使用 str.erase(str.begin() + index) 擦除字符串中的字符?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能创建在与类定义相同的命名空间中定义的 C++ 类的实例?