我有一个字符串变量,其中包含: string var =“this_is.that_alos”我怎么能只从它中分离出“that_alos”。 即在“that_alos”之后我只需要第二部分
答案 0 :(得分:3)
std::string var = "this_is.that_alos";
std::string part = var.substr(var.find_first_of('.'));
如果您要排除'.'
,只需添加1:
std::string part = var.substr(var.find_first_of('.') + 1);
答案 1 :(得分:2)
在C中,通常的函数是strchr(3)
:
char * second_half = strchr(var, '.');
当然,这只是一个指向字符串中间的新指针。如果您开始写入此字符串,它将更改它的唯一副本,char *var
也指向该副本。 (再次,假设C。)
答案 2 :(得分:0)
std::string var = "this_is.that_alos";
std::string::iterator start = std::find(var.begin(), var.end(), '.')
std::string second(start + 1, var.end());
但如果start + 1
不包含任何点,您应该检查var.end()
是否不是var
。
答案 3 :(得分:0)
如果您不想使用字符串索引或迭代器,可以使用std::getline
std::string var = "this_is.that_alos";
std::istringstream iss(var);
std::string first, second;
std::getline(iss, first, '.');
std::getline(iss, second, '.');
答案 4 :(得分:0)
使用strtok
分割字符串,特殊字符为“。”
对于前
string var = "this_is.that_alos";
string Parts[5] = strtok(&var[0],".");
string SubPart = Parts[1];
希望它能帮助你。
答案 5 :(得分:0)
最简单的解决方案是使用boost :: regex(很快就会成为 的std ::正则表达式)。目前尚不清楚具体要求是什么, 但是使用正则表达式很容易指定它们。
否则(并且可以考虑使用正则表达式 这个过度杀戮),我会使用通常的算法,这些算法适用于 任何序列。在这种情况下,std :: find会找到第一个'。', 使用反向迭代器来查找最后一个等等。
- 詹姆斯坎泽