c/c++中输入输出处理 按分隔符(换行、逗号、空格等)读取

读取输入中字符流的常用函数为getline,其有两种实现:

1、<istream>中提供的getline()函数

istream& getline (char* s, streamsize n);
istream& getline (char* s, streamsize n, char delim);

调用的时候直接cin.getline() 

2、<string>中提供的getline()函数

istream& getline (istream&  is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream&  is, string& str);
istream& getline (istream&& is, string& str);

注:getline默认按行读取,不含换行符

下面列出一些使用示例代码。

①读取一行

#include <iostream>

char szbuf[128] = {0};
while(cin.getline(szbuf, 128))
    cout << szbuf << endl;

gets、cin.getline读取一行数据,遇换行结束读取。

②读取输入,遇空格结束

#include <iostream>
#include <string>

string str1, str2;
while(cin >> str1 >> str2) //循环读入多行,每行两个字符串,中间空格分隔

scanf、cin都是读取输入,遇空格结束。

③读取一行后,以空格分隔读取各个子串

#include <iostream>
#include <string>
#include <sstream>

string str_line;
getline(cin, str_line)

stringstream ss(str_line);
string str_tmp;
while(ss >> str_num)
    cout << str_tmp;

这里使用sstream提供的stringstream类,默认可以按空格分隔读取字符串。

④读取一行字符串后,以逗号分隔读取各个子串

#include <iostream>
#include <string>
#include <sstream>
    
string str_line;
while(getline(cin, str_line))
{
    stringstream ss(str_line);
    string str_tmp;
 
    set<string> s_sorted_str;
    while(getline(ss, str_tmp, ','))
        cout << str_tmp;
}

⑤从文件中按行读取,打印以逗号为分隔的每个字符串

#include <iostream>
#include <fstream>
#include <sstream>

ifstream in_file("data.txt");

string str_line;
while(getline(in_file, str_line, ','))
{
    string str_tmp;
    stringstream ss(str_line);
    while (ss >> str_tmp)
        cout << str_tmp << " ";       
}

in_file.close();


版权声明:本文为weixin_42915431原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。