C++实现循环从标准输入流中读取带空格的字符串,该怎么处理
C++实现循环从标准输入流中读取带空格的字符串
比如我想读取以下字符串 hello_world , jisuanji, a = 8 这三个字符串,如何实现。
------解决思路----------------------
std::basic_istream::getline
C++ 输入/输出库 std::basic_istream
1) 提取字符流的线(相当于getline(s, count, widen(’\n’)))的,直到结束
2) 提取字符流,直到指定的分隔符.
表现为UnformattedInputFunction。建设和检查岗哨对象的,提取的字符*this,并将其存储在连续位置的数组,该数组的第一个元素是指向s,直至出现以下任何情况:(测试中显示的顺序)
文件的条件的结束发生在输入序列中(在这种情况下,setstate(eofbit)被执行)
下一个可用的字符c是分隔符,确定Traits::eq(c, delim)。分隔符中提取(不像basic_istream::get())和计入gcount(),但还没有存储.
count-1字符已被提取的(在这种情况下setstate(failbit)执行).
如果函数中提取任何字符(例如,如果count < 1),setstate(failbit)执行.
在任何情况下,如果count>0,然后将其存储到下一个连续的阵列的位置和更新的一个空字符CharT()gcount().
注释
由于条件#2之前测试条件#3中,输入线完全适合的缓冲液,不触发failbit.
因为终止字符算作提取的字符,输入空行不触发failbit.....
参数
s - 指针的存储的字符的字符串
count - 所指向的字符串的大小s
delim - 分隔符,停止提取的。它被提取,但不存储.
返回值
*this
示例
输出:
abc
def
gh
------解决思路----------------------
------解决思路----------------------
std::basic_istream 是各种输入流的基类,包括标准输入流
比如我想读取以下字符串 hello_world , jisuanji, a = 8 这三个字符串,如何实现。
------解决思路----------------------
std::basic_istream::getline
C++ 输入/输出库 std::basic_istream
basic_istream& getline( char_type* s, std::streamsize count ); (1)
basic_istream& getline( char_type* s, std::streamsize count, char_type delim ); (2)
1) 提取字符流的线(相当于getline(s, count, widen(’\n’)))的,直到结束
2) 提取字符流,直到指定的分隔符.
表现为UnformattedInputFunction。建设和检查岗哨对象的,提取的字符*this,并将其存储在连续位置的数组,该数组的第一个元素是指向s,直至出现以下任何情况:(测试中显示的顺序)
文件的条件的结束发生在输入序列中(在这种情况下,setstate(eofbit)被执行)
下一个可用的字符c是分隔符,确定Traits::eq(c, delim)。分隔符中提取(不像basic_istream::get())和计入gcount(),但还没有存储.
count-1字符已被提取的(在这种情况下setstate(failbit)执行).
如果函数中提取任何字符(例如,如果count < 1),setstate(failbit)执行.
在任何情况下,如果count>0,然后将其存储到下一个连续的阵列的位置和更新的一个空字符CharT()gcount().
注释
由于条件#2之前测试条件#3中,输入线完全适合的缓冲液,不触发failbit.
因为终止字符算作提取的字符,输入空行不触发failbit.....
参数
s - 指针的存储的字符的字符串
count - 所指向的字符串的大小s
delim - 分隔符,停止提取的。它被提取,但不存储.
返回值
*this
示例
#include <iostream>
#include <sstream>
#include <vector>
#include <array>
int main()
{
std::istringstream input("abc
------解决思路----------------------
def
------解决思路----------------------
gh");
std::vector<std::array<char, 4>> v;
for(std::array<char, 4> a; input.getline(&a[0], 4, '
------解决思路----------------------
'); ) {
v.push_back(a);
}
for(auto& a : v) {
std::cout << &a[0] << '\n';
}
}
输出:
abc
def
gh
------解决思路----------------------
const char *str="hello_world , jisuanji, a = 8,";
vector<string> vstr;
auto p0=str;
for(auto p=p0;*p;p++) if(*p==','){
vstr.push_back(string(p0,p));
p0 =p+1;
}
if(*p0) vstr.push_back(p0);
for(auto &t : vstr) cout<<t<<endl;
------解决思路----------------------
std::basic_istream 是各种输入流的基类,包括标准输入流