Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何拆分字符串?_C++_C - Fatal编程技术网

C++ 如何拆分字符串?

C++ 如何拆分字符串?,c++,c,C++,C,可能重复: 我有一个字符串变量,其中包含: string var=this_is.that_alos我只能从中分离出that_alos。 i、 在那之后我只需要第二部分 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('.')

可能重复:

我有一个字符串变量,其中包含: string var=this_is.that_alos我只能从中分离出that_alos。 i、 在那之后我只需要第二部分

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:

std::string part = var.substr(var.find_first_of('.') + 1);

在C中,通常的函数是strchr3:


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

,通常的函数是strchr3:

std::string var = "this_is.that_alos";

std::string::iterator start = std::find(var.begin(), var.end(), '.')
std::string second(start + 1, var.end());
当然,这只是一个指向字符串中间的新指针。如果您开始写入这个字符串,它会更改它的唯一副本,这也是char*var指向的

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不包含任何点


但您应该检查start+1是否不是var.end,如果var不包含任何点。

如果您不想使用字符串索引或迭代器,可以使用std::getline


如果不想使用字符串索引或迭代器,可以使用std::getline

使用strtok拆分字符串,特殊字符为。 前

希望它能帮助您。

使用strtok分割字符串,特殊字符为。 前


希望它能对你有所帮助。

最简单的解决方案是使用boost::regex std::regex。具体要求是什么还不清楚, 但是使用正则表达式应该很容易指定它们

否则,可以考虑使用正则表达式 对于这一点,我会使用通常的算法,它适用于 任何序列。在本例中,std::find将查找第一个“.”, 将其与反向迭代器一起使用以查找最后一个等

-
James Kanze

最简单的解决方案是使用boost::regex std::regex。具体要求是什么还不清楚, 但是使用正则表达式应该很容易指定它们

否则,可以考虑使用正则表达式 对于这一点,我会使用通常的算法,它适用于 任何序列。在本例中,std::find将查找第一个“.”, 将其与反向迭代器一起使用以查找最后一个等

-
詹姆斯·坎兹

你需要更准确地表达你的想法。。。字符串中是否只有一个“.”?如果不是,你想要第一个“的”部分,最后一个“.'”,或者是否还有其他方法要使用?如果你真的使用C++,那么也许可以考虑删除C标记。我下面的答案假设C是可以的,因为这是我熟悉的:但是如果你真的想要一个C++惯用的答案,请更新标签,我会删除我的答案。谢谢不要使用pls和其他类似的缩写。你需要更精确地表达你想要的。。。字符串中是否只有一个“.”?如果不是,你想要第一个“的”部分,最后一个“.'”,或者是否还有其他方法要使用?如果你真的使用C++,那么也许可以考虑删除C标记。我下面的答案假设C是可以的,因为这是我熟悉的:但是如果你真的想要一个C++惯用的答案,请更新标签,我会删除我的答案。HypSPLZ不使用PLS和其他这样的缩写。STD::FordPixSTyOf不返回迭代器。您是对的,但我想知道为什么,如果所有其他查找操作都返回迭代器?您可以使用STD::find:STD::String在STL之前被添加到C++标准中,这就是为什么它有自己的返回索引的查找函数,不迭代器。STD::String::FundFixSTyOf不返回迭代器。您是对的,但我想知道为什么,如果所有其他查找操作都返回迭代器?您可以使用STD::find:STD::String在STL之前添加到C++标准中,这就是为什么它有自己的查找函数返回索引,而不是迭代器。它正在工作,但IM正在获得。也在部件字符串中。如何避免。@balaji:请看我的编辑。我强烈建议您阅读这些方法的文档。这是一项非常简单的任务,只要稍加搜索,你就可以自己解决。我认为,通过回答这样的问题,我们实际上是在伤害自己,也在伤害我们自己,因为我们释放了世界上没有研究或思考技能的非常糟糕的程序员。这是可行的,但我得到了回报。也在部件字符串中。如何避免。@balaji:请看我的编辑。我强烈建议您阅读这些方法的文档。这是一项非常简单的任务,只要稍加搜索,你就可以自己解决它。我认为,通过回答这样的问题,我们实际上是在做OP a,我们自己也在做,因为我们释放了世界上没有研究或思考技能的非常糟糕的程序员。
string var = "this_is.that_alos";
string Parts[5] = strtok(&var[0],".");
string SubPart = Parts[1];