我正在寻找从std::string
删除第一个单词的最佳方法。这就是我所拥有的,但我觉得这是过于令人沮丧的事情。最好和最短的方法是什么?感谢。
#include <string>
#include <iostream>
#include <sstream>
int main()
{
std::string str{"Where is everybody?"};
std::string first;
if (std::stringstream{str} >> first)
{
str.erase(str.begin(), str.begin() + first.size());
}
std::cout << str; // " is everybody?"
}
答案 0 :(得分:8)
小调整,它也利用下半年的IO流:)
#include <string>
#include <iostream>
#include <sstream>
int main()
{
std::string str{"Where is everybody?"};
std::string first;
std::istringstream iss{str};
iss >> first;
std::ostringstream oss;
oss << iss.rdbuf();
std::cout << oss.str(); // " is everybody?"
}
答案 1 :(得分:6)
您可以在没有流的情况下执行此操作:跳过初始空格,找到之后的第一个空格,步行到下一个非空格,然后使用substr
获取string
的其余部分:
int i = 0;
while (isblank(str[i])) i++;
while (!isblank(str[i])) i++;
while (isblank(str[i])) i++;
str = str.substr(i);
答案 2 :(得分:4)
这是使用c ++ 11的正则表达式
的解决方案#include <iostream>
#include <string>
#include <regex>
#include <iterator>
int main ()
{
std::string s ("there is a subsequence in the string\n");
std::regex e ("(\\s*)(\\w*)(.*)");
std::cout << std::regex_replace (s,e,"$1$3");
return 0;
}
答案 3 :(得分:1)
您可以尝试使用string :: substr()和string :: find_first_of()。