我想分割一个字符串使用包含空格和标点的C++。C++分割字符串,空格和标点符号
例如str = "This is a dog; A very good one."
我想要得到的“这”“是”“一”“狗”“A”“非常”“好”“” 1加1
一个它只有一个很简单的分隔符使用函数getline但我不知道所有的分隔符。它可以是任何标点符号。
注意:我不想使用Boost!
我想分割一个字符串使用包含空格和标点的C++。C++分割字符串,空格和标点符号
例如str = "This is a dog; A very good one."
我想要得到的“这”“是”“一”“狗”“A”“非常”“好”“” 1加1
一个它只有一个很简单的分隔符使用函数getline但我不知道所有的分隔符。它可以是任何标点符号。
注意:我不想使用Boost!
使用std::find_if()
与拉姆达找到的分隔符。
auto it = std::find_if(str.begin(), str.end(), [] (const char element) -> bool {
return std::isspace(element) || std::ispunct(element);})
因此,从第一个位置开始,您会找到第一个有效的标记。您可以使用
index = str.find_first_not_of (yourDelimiters);
然后你必须找到在此之后的第一个分隔符,所以你可以做
delimIndex = str.substr (index).find_first_of (yourDelimiters);
那么你的第一个字是
然后删掉你的字符串并重复。当然,您必须处理find_first_not_of和find_first_of返回npos的所有情况,这意味着该字符未找到,但我认为这足以开始。
顺便说一句,我并不是说这是最好的方法,但它的工作原理...
他不知道什么将作为分隔符。 – 2012-02-17 18:34:14
vmpstr的解决方案的工作原理,但可能有点乏味。几个月前,我写了一个C库,可以做你想做的。 http://wiki.gosub100.com/doku.php?id=librerias:c:cadenas
资料已写入西班牙文(对不起)。
它不需要外部依赖。尝试使用splitWithChar()函数。使用的
实施例:
#include "string_functions.h"
int main(void){
char yourString[]= "This is a dog; A very good one.";
char* elementsArray[8];
int nElements;
int i;
/*------------------------------------------------------------*/
printf("Character split test:\n");
printf("Base String: %s\n",yourString);
nElements = splitWithChar(yourString, ' ', elementsArray);
printf("Found %d element.\n", nElements);
for (i=0;i<nElements;i++){
printf ("Element %d: %s\n", i, elementsArray[i]);
}
return 0;
}
原始字符串 “yourString” 被使用后spliWithChar()修改,所以要小心。
祝你好运:)
你知道所有的字母,对吗?因此,如果您发现任何不是字母的内容,请将其视为分隔符。 – 2012-02-17 18:32:19
可能的重复[如何在C++中标记字符串?](http://stackoverflow.com/questions/53849/how-do-i-tokenize-a-string-in-c) – 2012-02-17 19:05:51