如何从字符串c ++中删除子字符串

sun*_*set 4 c++ split token

我有一个 string s="home/dir/folder/name"

我想分裂ss1="home/dir/folder"s2="name";

我做了:

char *token = strtok( const_cast<char*>(s.c_str() ), "/" );
std::string name;
std::vector<int> values;
while ( token != NULL )
{
    name=token;

    token = strtok( NULL, "/" );
}
Run Code Online (Sandbox Code Playgroud)

现在s1=name.怎么样s2

NPE*_*NPE 7

我建议不要使用strtok.请改为使用Boost Tokenizer(以下是一些示例).

或者,要简单地找到最后一个的位置'/',您可以使用std::string::rfind:

#include <string>
#include <iostream>

int main() {
  std::string s = "home/dir/folder/name";
  std::string::size_type p = s.rfind('/');
  if (p == std::string::npos) {
    std::cerr << "s contains no forward slashes" << std::endl;
  } else {
    std::string s1(s, 0, p);
    std::string s2(s, p + 1);
    std::cout << "s1=[" << s1 << "]" << std::endl;
    std::cout << "s2=[" << s2 << "]" << std::endl;
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • Boost tokenizer可能有点过分,但如果他做了很多这类事情,Boost文件系统有各种有用的功能. (2认同)