2011-03-08 118 views
1

可能重复:
Is There A Built-In Way to Split Strings In C++?如何分割字符串?

我有一个字符串变量包含: 串VAR = “this_is.that_alos” 我怎样才能只分开它 “that_alos”。 也就是说,如果你要排除的'.'我需要 “that_alos”

+1

你需要与你更精确要...字符串只有一个'。'在里面?如果不是,你是否想要第一个'。',最后一个'。'之后的部分,还是有其他方法可以使用? – jswolf19 2011-03-08 09:03:43

+1

也许可以考虑删除'C'标签,如果你真的使用C++。我的答案在下面假设C是好的,因为这就是我熟悉的:)但如果你真的想要一个C++ - 惯用的答案,请更新标签,我会删除我的答案。谢谢 – sarnold 2011-03-08 09:05:07

+3

你使用C还是C++? – 2011-03-08 09:06:05

回答

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); 
+0

它正在工作,但即时获得“。”也在部分字符串中。如何避免“。” – balaji 2011-03-08 09:17:32

+4

@balaji:看我的编辑。我强烈建议您阅读这些方法的文档。这是一项非常简单的任务,只需要一点搜索,你就可以自己解决。 – 2011-03-08 09:23:34

+4

我认为,通过回答这样的问题,我们实际上是通过释放非常糟糕的程序员,在世界上没有研究或思考能力的方式来做OP,这是一种伤害。 – 2011-03-08 14:07:39

2

在C,通常的功能是strchr(3)

char * second_half = strchr(var, '.'); 

当然,这只是一个指向字符串中间的新指针。如果您开始写入该字符串,它将更改它的唯一副本,这也是char *var指向的副本。 (同样,假设C.)

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 + 1var.end(),如果var不包含任何点。

+0

'std :: string :: find_first_of'不返回迭代器。 – 2011-03-08 09:07:46

+0

你是对的,但我想知道为什么,如果所有其他查找操作返回一个迭代器? – Fox32 2011-03-08 09:11:59

+0

虽然你可以使用'std :: find'。 – 2011-03-08 09:13:22

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, '.'); 
0

使用strtok用于拆分字符串,用特殊字符为“” 为前

string var = "this_is.that_alos"; 
string Parts[5] = strtok(&var[0],"."); 
string SubPart = Parts[1]; 

希望这将有助于美国

0

最简单的解决办法是使用boost ::正则表达式(即将 的std ::正则表达式)。目前还不清楚确切的要求是什么, 但它们应该很容易使用正则表达式来指定。

否则(使用正则表达式可能会被认为是 矫枉过正),我会使用通常的算法,这些算法适用于任何序列的 。 '。在这种情况下,的std ::发现将发现第一, 用它来与反向迭代器来找到最后等

- 詹姆斯甘孜