合并 std::remove_if + str.erase() 的问题

Problem with combining std::remove_if + str.erase()

我有一个字符串,必须删除从指定点到空白字符的所有字符。

example(str = "I Have A Nice Day" specified Point: Beginning of Nice, what i want is take "Nice" (它可以是我不知道范围的每个词。必须是直到空白字符) )

我写了这段代码:

Mystr = "I Have A Nice Day"
Mystr = SearchingString.substr(9, (SearchingString.size()-9)); // Everything in interval 0-9 must be deleted
Mystr.erase(std::remove_if(Mystr.begin(), myStr.end(), isspace), Mystr.end()); //supposed to erase everything since whitespace character

而是;它只会擦除空白字符。所以我的输出像“NiceDay”而不是“Nice”。

我的代码有什么问题?

从回答中,我了解到我的问题被误解了。所以我将分享 excat 代码:

数据写入 .txt 文件ID 58 0 (我用 getline 得到每个 ID。58 代表人的 id。0 代表它没有加密。但 id 可以是 324、3216372173 或更多。我想将 id 信息与加密信息分开)

代码:

 while (!Input.eof()) {

            ID = SearchingString.substr(3, (SearchingString.size()-3));
            ID.erase(std::remove_if(ID.begin(), ID.end(), isspace), ID.end());
            isdecrypted = SearchingString.substr((ID.size() + 4), 1); 

注意:是解密的,ID,SearchingString的都是字符串类型

我知道在加密之前添加ID.erase(ID.end);

while (!Input.eof()) {
    
                ID = SearchingString.substr(3, (SearchingString.size()-3));
                ID.erase(std::remove_if(ID.begin(), ID.end(), isspace), ID.end()); 
ID.erase(ID.end()); //Adding this
isdecrypted = SearchingString.substr((ID.size() + 4), 1); 

将删除密码信息。但我问这个的目的是为了学习更多代码的算法。

通过使用 std::remove_if(),您将仅删除空白字符,这与您想要的相反。

因为您知道起始位置,所以使用 std::find_if() 来查找结束位置,然后 erase() 中间的所有内容。

std::string Mystr = "I Have A Nice Day";
size_t startPos = ...; // 9 for “Nice”
auto startIter = Mystr.begin() + startPos;
auto endIter = std::find_if(startIter, Mystr.end(),
    [](unsigned char ch){ return isspace(ch); }
);
if (endIter != Mystr.end()) {
    endIter = std::find_if(endIter+1, Mystr.end(),
        [](unsigned char ch){ return !isspace(ch); }
    );
}
Mystr.erase(startIter, endIter);

Live Demo