如何在不刪除分隔符的情況下使用strtok將文本拆分爲標記? 我只想在他們的地方分裂。使用strtok拆分文本而不刪除分隔符C++
1
A
回答
0
你不能。 strtok
的行爲是用NUL字符替換分隔符。此行爲不可配置。要返回每個子字符串(包括分隔符),必須找到strtok
以外的函數,否則將strtok
與您自己的一些處理結合起來。
2
你不能。 strtok
通過將分隔符替換爲'\ 0'來進行分割。如果不這樣做,不會發生分裂。
然而,您可以創建一個像strtok
這樣的拆分類型的函數,但通過查找字符串應該拆分的位置以及(例如)分配存儲空間並將字符複製到分隔符中。 strcspn
或strpbrk
可能會是一個有用的開始。
0
如果你的libc實現了它,看看strsep(3)
+0
文檔http://kernel.org/doc/man-pages/online/pages/man3/strsep.3.html – Bklyn 2010-07-30 03:47:47
1
你可以使用boost嗎? boost::algorithm::split完全符合你的要求。
你當然可以自己寫一個;它不像分裂是複雜的:(注意:我沒有真實地測試過)
std::wstring source(L"Test\nString");
std::vector<std::wstring> result;
std::wstring::iterator start, end;
start = source.begin();
end = std::find(source.begin(), source.end(), L'\n');
for(; end != source.end(); start = end, end = std::find(end, source.end(), L'\n'))
result.push_back(std::wstring(start, end));
result.push_back(std::wstring(start, end));
1
簡單的不使用strtok。
使用C++流操作符。
getline()函數可以與定義線標記結束的額外參數一起使用。
#include <string>
#include <sstream>
#include <vector>
int main()
{
std::string text("This is text; split by; the semicolon; that we will split into bits.");
std::stringstream textstr(text);
std::string line;
std::vector<std::string> data;
while(std::getline(textstr,line,';'))
{
data.push_back(line);
}
}
隨着工作量的增加,我們甚至可以通過STL算法來支付他們的部分費用,我們只需要定義令牌如何流式傳輸。要做到這一點,只需定義一個令牌類(或結構),然後定義運算符>>,它可以讀取令牌分隔符。
#include <string>
#include <sstream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <iostream>
struct Token
{
std::string data;
operator std::string() const { return data;}
};
std::istream& operator>>(std::istream& stream,Token& data)
{
return std::getline(stream,data.data,';');
}
int main()
{
std::string text("This is text; split by; the semicolon; that we will split into bits.");
std::stringstream textstr(text);
std::vector<std::string> data;
// This statement does the work of the loop from the last example.
std::copy(std::istream_iterator<Token>(textstr),
std::istream_iterator<Token>(),
std::back_inserter(data)
);
// This just prints out the vector to the std::cout just to illustrate it worked.
std::copy(data.begin(),data.end(),std::ostream_iterator<std::string>(std::cout,"\n"));
}
相關問題
- 1. Perl拆分()不刪除分隔符
- 2. Python拆分刪除分隔符?
- 3. C#如何分割文本,但不刪除分隔符?
- 4. 拆分字符串,不刪除分隔符
- 5. 拆分字符串而不刪除分隔符,但是禁止空捕獲組
- 6. 拆分字符串在C strtok()
- 7. 拆分分隔符不同
- 8. 使用不同的分隔符刪除
- 9. Python在正則表達式上拆分而不刪除分隔符
- 10. 使用strtok分隔路徑()
- 11. C多個Strtok來確定分隔符
- 12. strtok與空格分隔符
- 13. c#拆分字符串與一些分隔符和分隔符
- 14. 刪除分隔符
- 15. 在C中使用strtok使用多個分隔符的分割字符串
- 16. Python的分裂()不刪除分隔符
- 17. 在拆分中使用分隔符
- 18. 使用分隔符c將字符串拆分爲一個點#
- 19. 拆分在C++字符串使用2個分隔符「+」和「 - 」
- 20. 拆分分隔字符串並刪除轉義序列
- 21. 使用strtok()將字符串拆分爲3部分
- 22. Java拆分分隔符
- 23. 拆分多個分隔符
- 24. 拆分列分隔符R
- 25. 使用slugify完全刪除分隔符
- 26. 我怎麼拆不刪除分隔符,如果它是空白
- 27. 刪除千位分隔符C編程
- 28. 用' - '分隔符分隔文本
- 29. 如何使用分隔符將文件拆分成換行符?
- 30. C#從字符串拆分中刪除最後一個分隔的字段
你能舉一個你想要的例子嗎? – Jacob 2010-07-30 01:32:50