我希望它考慮任何不是字母字符的分隔符。我怎樣才能做到這一點?你能指定什麼不是std :: getline中的分隔符嗎?
3
A
回答
3
你不能。缺省的分隔符是\n
:
while (std::getline (std::cin, str) // '\n' is implicit
對於其他的分隔符,通過他們:
while (std::getline (std::cin, str, ' ') // splits at a single whitespace
然而,分隔符是char類型的,所以你只能用一個「分裂性格」,但不什麼不匹配。
如果您的輸入恰好位於std::string
之類的容器內,則可以使用find_first_not_of
或find_last_not_of
。
在你的其他問題中,你確定你已經考慮過所有答案嗎?一個使用istream::operator>>(std::istream&, <string>)
,它將匹配一系列非空白字符。
3
你不知道。 getline
是簡單工作的簡單工具。如果你需要更復雜的東西,那麼你需要使用更復雜的工具,比如RegEx或其他東西。
0
你不能用你想要的東西std::getline()
,但你可以推出自己的。這裏有一個getline
變體,讓你指定一個謂詞(函數,函數,lambda,如果它是C++ 11)來指示一個字符是否是一個分隔符以及一對允許傳入一串分隔符的重載strtok()
):
#include <functional>
#include <iostream>
#include <string>
using namespace std;
template <typename Predicate>
istream& getline_until(istream& is, string& str, Predicate pred)
{
bool changed = false;
istream::sentry k(is,true);
if (bool(k)) {
streambuf& rdbuf(*is.rdbuf());
str.erase();
istream::traits_type::int_type ch = rdbuf.sgetc(); // get next char, but don't move stream position
for (;;ch = rdbuf.sgetc()) {
if (istream::traits_type::eof() == ch) {
is.setstate(ios_base::eofbit);
break;
}
changed = true;
rdbuf.sbumpc(); // move stream position to consume char
if (pred(istream::traits_type::to_char_type(ch))) {
break;
}
str.append(1,istream::traits_type::to_char_type(ch));
if (str.size() == str.max_size()) {
is.setstate(ios_base::failbit);
break;
}
}
if (!changed) {
is.setstate(ios_base::failbit);
}
}
return is;
}
// a couple of overloads (along with a predicate) that allow you
// to pass in a string that contains a set of delimiter characters
struct in_delim_set : unary_function<char,bool>
{
in_delim_set(char const* delim_set) : delims(delim_set) {};
in_delim_set(string const& delim_set) : delims(delim_set) {};
bool operator()(char ch) {
return (delims.find(ch) != string::npos);
};
private:
string delims;
};
istream& getline_until(istream& is, string& str, char const* delim_set)
{
return getline_until(is, str, in_delim_set(delim_set));
}
istream& getline_until(istream& is, string& str, string const& delim_set)
{
return getline_until(is, str, in_delim_set(delim_set));
}
// a simple example predicate functor
struct is_digit : unary_function<char,bool>
{
public:
bool operator()(char c) const {
return ('0' <= c) && (c <= '9');
}
};
int main(int argc, char* argv[]) {
string test;
// treat anything that's not a digit as end-of-line
while (getline_until(cin, test, not1(is_digit()))) {
cout << test << endl;
}
return 0;
}
相關問題
- 1. 的std ::函數getline:分隔字符與字符數
- 2. 在std :: getline()上使用任何字符作爲分隔符
- 3. 問題與getline()分隔符
- 4. 特林轉換爲在std :: getline分隔符中使用的str字符串
- 5. getline與分隔符存儲空字符
- 6. 功能上用分隔符分隔字符串的最佳方法是什麼?
- 7. 使用stringstream的getline分隔符
- 8. 你能指定read.table中的列數嗎?
- 9. std :: getline不接受std :: back_insert_iterator
- 10. SQL:什麼是所有的分隔符?
- 11. 什麼是'多部分標識符',爲什麼不能綁定?
- 12. C++逗號分隔/ getline
- 13. strtok只在指定的分隔符上不能標記
- 14. php爲什麼當你聲明它時,你不能指定某個屬性?
- 15. 你能指導我在代碼中出了什麼問題嗎?
- 16. 使用什麼獨特的分隔符而不是逗號來分隔
- 17. 什麼是JavaScript中的小數點分隔符符號?
- 18. Python 3中的@操作符/分隔符是什麼?
- 19. 爲什麼我不能std ::分區這個std :: unordered_map?
- 20. getline中的緩衝點是什麼?
- 21. std :: getline()返回
- 22. 我可以在StringTemplate中使用字符串分隔符嗎?如果不是,什麼是好的模板引擎?
- 23. 什麼是std :: safe_string?
- 24. 爲什麼總是在std :: for_each中指定迭代器?
- 25. std ::向帶自定義分隔符的字符串向量
- 26. hs_err_pid文件中指定堆的不同部分是什麼?
- 27. 爲什麼我不能在awk中使用字符串「?B?」作爲分隔符
- 28. 你可以在ASP.net Textboxes中製作一個「分隔符」嗎? (C#)
- 29. 我們可以爲hive視圖明確指定分隔符嗎?
- 30. 如何指定小數點分隔符