可能重複:
Is There A Built-In Way to Split Strings In C++?如何分割字符串?
我有一個字符串變量包含: 串VAR = 「this_is.that_alos」 我怎樣才能只分開它 「that_alos」。 也就是說,如果你要排除的'.'
我需要 「that_alos」
可能重複:
Is There A Built-In Way to Split Strings In C++?如何分割字符串?
我有一個字符串變量包含: 串VAR = 「this_is.that_alos」 我怎樣才能只分開它 「that_alos」。 也就是說,如果你要排除的'.'
我需要 「that_alos」
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);
它正在工作,但即時獲得「。」也在部分字符串中。如何避免「。」 – balaji 2011-03-08 09:17:32
@balaji:看我的編輯。我強烈建議您閱讀這些方法的文檔。這是一項非常簡單的任務,只需要一點搜索,你就可以自己解決。 – 2011-03-08 09:23:34
我認爲,通過回答這樣的問題,我們實際上是通過釋放非常糟糕的程序員,在世界上沒有研究或思考能力的方式來做OP,這是一種傷害。 – 2011-03-08 14:07:39
在C,通常的功能是strchr(3)
:
char * second_half = strchr(var, '.');
當然,這只是一個指向字符串中間的新指針。如果您開始寫入該字符串,它將更改它的唯一副本,這也是char *var
指向的副本。 (同樣,假設C.)
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
不包含任何點。
'std :: string :: find_first_of'不返回迭代器。 – 2011-03-08 09:07:46
你是對的,但我想知道爲什麼,如果所有其他查找操作返回一個迭代器? – Fox32 2011-03-08 09:11:59
雖然你可以使用'std :: find'。 – 2011-03-08 09:13:22
如果你不想使用字符串索引或迭代器,你可以使用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, '.');
使用strtok
用於拆分字符串,用特殊字符爲「」 爲前
string var = "this_is.that_alos";
string Parts[5] = strtok(&var[0],".");
string SubPart = Parts[1];
希望這將有助於美國
最簡單的解決辦法是使用boost ::正則表達式(即將 的std ::正則表達式)。目前還不清楚確切的要求是什麼, 但它們應該很容易使用正則表達式來指定。
否則(使用正則表達式可能會被認爲是 矯枉過正),我會使用通常的算法,這些算法適用於任何序列的 。 '。在這種情況下,的std ::發現將發現第一, 用它來與反向迭代器來找到最後等
- 詹姆斯甘孜
你需要與你更精確要...字符串只有一個'。'在裏面?如果不是,你是否想要第一個'。',最後一個'。'之後的部分,還是有其他方法可以使用? – jswolf19 2011-03-08 09:03:43
也許可以考慮刪除'C'標籤,如果你真的使用C++。我的答案在下面假設C是好的,因爲這就是我熟悉的:)但如果你真的想要一個C++ - 慣用的答案,請更新標籤,我會刪除我的答案。謝謝 – sarnold 2011-03-08 09:05:07
你使用C還是C++? – 2011-03-08 09:06:05