C ++如何获得字符后的子字符串?

时间:2015-01-27 05:20:34

标签: c++ string substring

例如,如果我有

string x = "dog:cat";

我希望在":"之后提取所有内容,并返回cat。这样做的方法是什么?

9 个答案:

答案 0 :(得分:53)

试试这个:

x.substr(x.find(":") + 1); 

答案 1 :(得分:2)

#include <iostream>
#include <string>

int main(){
  std::string x = "dog:cat";

  //prints cat
  std::cout << x.substr(x.find(":") + 1) << '\n';
}

这是一个包含在函数中的实现,它将在任何长度的分隔符上起作用:

#include <iostream>
#include <string>

std::string get_right_of_delim(std::string const& str, std::string const& delim){
  return str.substr(str.find(delim) + delim.size());
}

int main(){

  //prints cat
  std::cout << get_right_of_delim("dog::cat","::") << '\n';

}

答案 2 :(得分:1)

试试这个:

  string x="dog:cat";
  int pos = x.find(":");
  string sub = x.substr (pos+1);
  cout << sub;

答案 3 :(得分:1)

你可以做的是获得&#39;的位置:&#39;从你的字符串中,然后使用子字符串检索该位置之后的所有内容。

size_t pos = x.find(":"); // position of ":" in str

string str3 = str.substr (pos);

答案 4 :(得分:1)

rcs的接受答案可以改进。没有代表,所以我无法对答案发表评论。

std::string x = "dog:cat";
std::string substr;
auto npos = x.find(":");

if (npos != std::string::npos)
    substr = x.substr(npos + 1);

if (!substr.empty())
    ; // Found substring;

未执行正确的错误检查会导致许多程序员绊倒。该字符串具有OP感兴趣的标记,但如果pos&gt;则抛出std :: out_of_range。尺寸()。

basic_string substr( size_type pos = 0, size_type count = npos ) const;

答案 5 :(得分:1)

我知道这将是超级晚,但我无法评论已接受的答案。如果在find函数中仅使用单个字符,请使用''而不是""。 正如Clang-Tidy所说的The character literal overload is more efficient.

所以     x.substr(x.find(':') + 1)

答案 6 :(得分:0)

试试这个 ..

std::stringstream x("dog:cat");
std::string segment;
std::vector<std::string> seglist;

while(std::getline(x, segment, ':'))
{
   seglist.push_back(segment);
}

答案 7 :(得分:0)

类似的东西:

string x = "dog:cat";
int i = x.find_first_of(":");
string cat = x.substr(i+1);

答案 8 :(得分:0)

#include <string>
#include <iostream>
std::string process(std::string const& s)
{
    std::string::size_type pos = s.find(':');
    if (pos!= std::string::npos)
    {
        return s.substr(pos+1,s.length());
    }
    else
    {
        return s;
    }
}
int main()
{
    std::string s = process("dog:cat");
    std::cout << s;
}