2011-03-08 117 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 ::發現將發現第一, 用它來與反向迭代器來找到最後等

- 詹姆斯甘孜