3

我正在寻找从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?"
}
4

4 回答 4

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?"
}
于 2013-06-16T16:44:20.047 回答
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);

这是关于 ideone 的演示

于 2013-06-16T16:43:45.283 回答
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;
}
于 2013-06-16T16:50:47.740 回答
1

您可以尝试使用 string::substr() 和 string::find_first_of()。

于 2013-06-16T16:45:09.237 回答