回答
首先如果有的話,我會一直使用boost ::標記生成器對於這樣的任務(見並給予好評下方偉大的答案)
如果得不到提高,你有兩個選擇:
您可以使用C++的std ::字符串,並使用stringstream的和函數getline(最安全的方法)
std::string str = "stack+overflow*newyork;";
std::istringstream stream(str);
std::string tok1;
std::string tok2;
std::string tok3;
std::getline(stream, tok1, '+');
std::getline(stream, tok2, '*');
std::getline(stream, tok3, ';');
std::cout << tok1 << "," << tok2 << "," << tok3 << std::endl
解析他們或者你可以使用的strtok家庭的功能(參見納文對Unicode的不可知版本的答案之一;請參閱下面的xtofls註釋以獲得警告關於線程安全英格斯),如果你是舒服字符指針
char str[30];
strncpy(str, "stack+overflow*newyork;", 30);
// point to the delimeters
char* result1 = strtok(str, "+");
char* result2 = strtok(str, "*");
char* result3 = strtok(str, ";");
// replace these with commas
if (result1 != NULL)
{
*result1 = ',';
}
if (result2 != NULL)
{
*result2 = ',';
}
// output the result
printf(str);
getline和strtok方法的不錯比較 – 2009-06-25 14:19:36
使用strtok時,要小心它的單一性! – xtofl 2009-06-25 14:40:00
見升壓標記生成器here。
此站點有一個字符串標記化函數,它將一串字符用作分隔符並返回一個字符串向量。
簡單的是這樣的:
#include <boost/tokenizer.hpp>
#include <vector>
#include <string>
std::string stringToTokenize= "stack+ovrflow*newyork;";
boost::char_separator<char> sep("+*;");
boost::tokenizer< boost::char_separator<char> > tok(stringToTokenize, sep);
std::vector<std::string> vectorWithTokenizedStrings;
vectorWithTokenizedStrings.assign(tok.begin(), tok.end());
現在vectorWithTokenizedStrings有你要找的令牌。注意boost :: char_separator變量。它擁有令牌之間的分隔符。
還有另一種方法使用分割字符串C/C++:
首先定義一個函數來分割字符串:
//pointers of the substrings, assume the number of fields will not be over 5
char *fields[5];
//str: the string to splitted
//splitter: the split charactor
//return the real number of fields or 0 if any error exits
int split(char* str, char *splitter)
{
if(NULL == str)
{
return 0;
}
int cnt;
fields[0] = str;
for(cnt = 1; (fields[cnt] = strstr(fields[cnt - 1], splitter)) != NULL &&
cnt < 5; cnt++)
{
*fields[cnt] = '\0';
++fields[cnt];
}
return cnt;
}
,那麼你可以使用此功能來分割字符串如下:
char* str = "stack+ovrflow*newyork;"
split(str, "+");
printf("%s\n", fields[0]); //print "stack"
split(fields[1], "*");
printf("%s\n", fields[0]); //print "ovrflow"
split(fields[1], ";");
printf("%s\n", fields[0]); //print "newyork"
這樣將更有效率和可重複使用的
- 1. 如何在CSH中分割字符串?
- 2. 如何在PHP中分割字符串?
- 3. 如何在Python中分割字符串?
- 4. 如何在J2ME中分割字符串?
- 5. 如何在javascript中分割字符串?
- 6. 如何在Python中分割字符串?
- 7. 如何在java中分割字符串?
- 8. 如何在Ruby中分割字符串?
- 9. 如何在Haskell中分割字符串?
- 10. 如何在java中分割字符串
- 11. 如何在Java中分割字符串?
- 12. 如何在C#中分割字符串?
- 13. 如何在C#中分割字符串?
- 14. 如何在java中分割字符串
- 15. 如何分割字符串
- 16. 如何分割字符串?
- 17. 如何分割字符串
- 18. 如何在字符串前後分割' - '
- 19. 如何在分割字符串循環
- 20. 如何在vb.net分割字符串
- 21. 如何分割在bash字符串由/
- 22. 如何在iPhone上分割字符串?
- 23. 如何在Oracle 9i分割字符串
- 24. 如何使用字符串分隔符分割字符串?
- 25. 如何使用字符串分隔符分割字符串?
- 26. 如何在scala中用分隔符分割字符串?
- 27. 如何在java中使用分隔符分割字符串?
- 28. 如何在lua中用多個分隔符分割字符串?
- 29. 如何在Java中分割字符串並保留分隔符?
- 30. 如何在Python中用多個分隔符分割字符串?
這串類您使用的?或者這是一個char *? – Salgar 2009-06-25 14:00:23