web-dev-qa-db-ja.com

C ++文字の後に部分文字列を取得する方法は?

たとえば、私が持っている場合

string x = "dog:cat";

「:」以降のすべてを抽出し、catを返します。これを行う方法は何ですか?

18
SKLAK

これを試して:

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

私はそれが超遅くなることを知っていますが、受け入れられた答えをコメントすることはできません。 find関数で単一の文字のみを使用している場合は、_''_の代わりに_""_を使用します。 Clang-Tidyが_The character literal overload is more efficient._と言うように

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

2
Newbie
#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
Trevor Hickey

できることは、文字列から「:」の位置を取得し、部分文字列を使用してその位置以降のすべてを取得することです。

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

string str3 = str.substr (pos);

1
Karthik R P

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> size()の場合、std :: out_of_rangeがスローされます。

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

これを試してください:

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

このようなもの:

string x = "dog:cat";
int i = x.find_first_of(":");
string cat = x.substr(i+1);
0
Cristian Olaru
#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;
}

これを試してみてください ..

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

while(std::getline(x, segment, ':'))
{
   seglist.Push_back(segment);
}
0
Dyrandz Famador