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();

  • 9
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个C++的代码示例,实现了此题的功能: ```c++ #include <iostream> #include <string> #include <algorithm> using namespace std; bool isSeparator(char c) // 判断字符是否为分隔符 { return c == ' ' || c == ',' || c == '.'; } void reverse(string &s, int start, int end) // 反转单词 { while(start < end) { char temp = s[start]; s[start] = s[end]; s[end] = temp; start++; end--; } } void reverseWords(string &s) { reverse(s.begin(), s.end()); // 先整体反转字符串 int start = 0; int len = s.length(); for(int i = 0; i < len; i++) { if(isSeparator(s[i])) // 判断是否为分隔符 { reverse(s, start, i - 1); // 反转单词 start = i + 1; } } reverse(s, start, len - 1); // 反转最后一个单词 } int main() { string str; getline(cin, str); // 从标准输入读取整行字符串 reverseWords(str); // 反转单词 int i = 0; while(i < str.length()) { if(isalpha(str[i])) // 如果是字母,则输出该单词 { cout << str[i]; i++; while(i < str.length() && isalpha(str[i])) { cout << str[i]; i++; } cout << ' '; } else // 如果是标点符号或空格,则继续向后遍历 { i++; } } cout << endl; // 输出完毕,换行 return 0; } ``` 这个程序和C语言的示例比较类似,但是使用了C++的STL库的`string`类型,以及更方便的输入输出方式。首先,我们使用`getline`函数从标准输入读取一行字符串,然后调用`reverseWords`函数对其的单词进行反转。`reverseWords`函数,我们先将整个字符串反转,然后再遍历一遍字符串,根据空格逗号或小数点等分隔符来找到单词的起始和结束位置,然后调用`reverse`函数反转单词。最后,我们再次遍历字符串,将所有单词逐个输出,忽略分隔符即可。 希望这个代码示例能够帮到您!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值