wake-up-neo.net

C++ Wie bekomme ich einen Teilstring nach einem Zeichen?

Zum Beispiel, wenn ich habe

string x = "dog:cat";

und ich möchte alles nach dem ":" extrahieren und die Katze zurückbringen. Was wäre der Weg, dies zu tun?

13
SKLAK

Versuche dies:

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

Ich weiß, dass es sehr spät sein wird, aber ich kann keine akzeptierte Antwort abgeben. Wenn Sie in der Funktion find nur ein einzelnes Zeichen verwenden, verwenden Sie '' Anstelle von "". Wie Clang-Tidy sagt The character literal overload is more efficient.

Also 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';
}

Hier ist eine Implementierung, die von einer Funktion umschlossen ist, die mit einem beliebig langen Trennzeichen funktioniert:

#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

Was Sie tun können, ist, die Position von ':' aus Ihrer Zeichenfolge abzurufen und dann alles nach dieser Position mit Teilzeichenfolge abzurufen.

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

string str3 = str.substr (pos);

1
Karthik R P

Die akzeptierte Antwort von rcs kann verbessert werden. Ich habe keine Vertreter, also kann ich die Antwort nicht kommentieren.

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;

Wenn keine ordnungsgemäße Fehlerprüfung durchgeführt wird, werden viele Programmierer ausgelöst. Der String hat den Sentinel, den das OP interessiert, wirft aber std :: out_of_range, wenn pos> size ().

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

Versuche dies:

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

etwas wie das:

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;
}

Probier diese ..

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