广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++ stringstream格式化输出输入详情
  • 258
分享到

C++ stringstream格式化输出输入详情

2024-04-02 19:04:59 258人浏览 八月长安
摘要

目录最近在笔试时经常遇见各种输入问题,于是细心总结一波;首先string str; cin>>str;遇到空格结束;于是乎产生了getline(),可与得到一行字符串;空

最近在笔试时经常遇见各种输入问题,于是细心总结一波;首先string str; cin>>str;遇到空格结束;于是乎产生了getline(),可与得到一行字符串;空格自动去掉,只要不讲cin和getline混用即可

 cin.getline(s,k);

    接收一行中k个字符,可以接收空格
    cin.getline()实际有三个参数,cin.getline(字符串,接收个数,结束字符);
    当第三个参数省略时,系统默认为 '\0' ;

 getline(cin,s);

    和cin.getline()类似,读入一行字符串,值得注意的是cin.getline()属于istream流,而getline()属于string流,二者并不相同。

StringStream

这个东西单独讲,比较重要,包含在sstream库中。

  • istringstream类用于执行c++风格的串流的输入操作。
  • ostringstream类用于执行C风格的串流的输出操作。
  • stringstream类同时可以支持C风格的串流的输入输出操作。

然后stringstream的作用就是从string对象读取字符或字符串。

 


string s = "ABCD";
    stringstream ss(s);
    char ch;
    while(ss>>ch){
        cout << ch << " ";
    }

    //运行结果
    //A B C D

又例如:


string s = "hello world";
    stringstream ss(s);
    string str;
    while(ss>>str){
        cout << str << " ";
    }

    //运行结果
    //hello world

在某些题目需要处理字符串时,这些题目往往是输入的一行中包含多个字符以及空格,这个时候就可以利用 stringstream进行单个字符或者单个字符串分析处理了

  例子程序:


int main()
{

    string line;
    int k = 1;
    cout << "===============case1================" << endl;;
    while (getline(cin, line)) //可与读到包含空格, ;等字符;但是在ss>>x时被截断
    {
        int sum = 0, x;
        stringstream ss(line);
        while (ss >> x)
        {
            sum += x;
        }
        cout << "the sum is :" << sum << endl;
        ++k;
        cout << endl;
        cout << "===============case" << k << "================" << endl;;
    }

    return 0;
}

-输出:

===============case1================
1 2 3 4 5
the sum is :15

===============case2================
1,2,3,4,5
the sum is :1

===============case3================
1 a 2 b 3
the sum is :1

===============case4================
a 1 1 1 1
the sum is :0

===============case5================

另外一组:


int main()
{

    string line;
    int k = 1;

    cout << "===============case1================" << endl;;
    while (getline(cin, line))
    {
        string out, x;
        stringstream ss(line);
        while (ss >> x)
        {
            cout << x << ";";
        }
        ++k;
        cout << endl;
        cout << "===============case" << k << "================" << endl;;
    }

    return 0;
}

 输出:

===============case1================
this is very Good!
this;is;very;good!;
===============case2================
this,is,very,good!
this,is,very,good!;
===============case3================

实验矩阵类型的输入:

3

0 1 2

2 3 4

5 6 7


int main()
{

    string line;
    int k = 1;
 //测试矩阵形式的输入:
    string input;
    int n;
    //cin >> n; //输入n行数据,如果后面用getline()后面的换行符不能处理
    getline(cin, input);
    stringstream ss(input);
    ss >> n;
    
    vector<vector<int> > vec;
    for (int i = 0; i < n;i++)
    {
        getline(cin,input); //会将换行符当做一行
        stringstream ss(input);
        int x;

        vector<int> temp;
        while (ss>>x) //只能以空格处理分离
        {
            temp.push_back(x);
        }
        vec.push_back(temp);
    }


    return 0;
}

 使用方法:

  • input1是没有空格的,带有,;将矩阵的行列分出来;
  • 但是使用cin>>k后,没有使用getline(input1), 应为input1本身是没有空格的字符串

经上面启发:练习这样的输入:

3 3
0,1 0,2;0,0 1,0;0,1 1,1;0,2 1,2;1,0 1,1;1,1 1,2;1,1 2,1;1,2 2,2;2,0 2,1

测试代码:


int main()
{

    string line;
    int k = 1;

    int row, col;
    getline(cin, line);
    stringstream ss(line);
    ss >> row >> col;
    getline(cin, line); //第二行
    stringstream s(line);
    string temp1, temp2, temp3;;
    vector<pair<pair<int,int>,pair<int,int>>> vec;
    while (getline(s, temp1, ';'))
    {
        vector<pair<int, int>> pair1;
        stringstream s3(temp1);
        while (getline(s3, temp2,' ')) //以换行符结束,中间为空格
        {
            pair<int, int> pair2;
            stringstream s4(temp2);
            vector<int> res;
            while (getline(s4, temp3, ','))
            {
                res.push_back(stoi(temp3));
            }
            pair2.first = res[0];
            pair2.second = res[1];

            pair1.push_back(pair2);
        }

        vec.push_back(make_pair(pair1[0],pair1[1]));
    }


    return 0;
}

输出:

另外参考输入遇到过问题题解:


5 0
1 2 3
0 4
0 4
0 4
1 2 3

int main()
{
    int N, id;
    string str;
    getline(cin, str);
    stringstream ss(str);
    ss >> N >> id;

    vector<vector<int>> vec;
    //for (int i = 0; i < N; i++)
    //{
    //  vector<int> temp;
    //  int user;
    //  getline(cin, str);
    //  stringstream s(str);
    //  while (s>>user) //以空格进行划分
    //  {
    //      temp.push_back(user);
    //  }
    //  vec.push_back(temp);
    //}

    while (getline(cin, str)) //其实可都可以不知道行数
    {
        vector<int> temp;
        int user;
        stringstream s(str);
        while (s >> user)
        {
            temp.push_back(user);
        }
        vec.push_back(temp);
    }

    cout << recommendFriends(vec, id) << endl;

    return 0;
}

int test()
{
    //int N,id;
    //cin >> N >> id; //直接输入用户数和需要查找的用户id ; 这样就会产生换行符

    int N;
    vector<int> in;
    char c;
    while ((c = cin.get()) != '\n')
    {
        cin.unget();
        cin >> N; 
        in.push_back(N);
    }
    
    vector<vector<int>> vec;
    for (int i = 0; i < in[0]; i++)
    {
        vector<int> temp;
        int user;
        
        while ((c=cin.get())!= '\n') //文件结果没有换行符了,所以陷入死循环
        {
            cin.unget();
            cin >> user;
            temp.push_back(user);
        }
        if (temp.size()!=0)
        {
            vec.push_back(temp);
        }
        
    }

    cout << recommendFriends(vec, in[1]) << endl;

    return 0;
}

全部代码:


#include <iOStream>
#include <algorithm>
#include <vector>
#include <unordered_map>
#include <unordered_set>

#include<sstream>
#include<fstream>
using namespace std;

#define cin infile //一定不能再oj系统中,有错,导致超时等!!!
//C++文件输入
ifstream infile("ini.txt", ifstream::in);


//函数功能:将输入字符串s,以字符串c(;)进行拆分,拆分结果放在v中
//函数参数说明:s为输入字符串;c为拆分的字符串;v为拆分结果
//函数返回值:正常返回0
int split_string(const std::string& s, std::vector<std::string>& v, const std::string& c)
{
    std::string::size_type pos1, pos2;
    pos2 = s.find(c);
    pos1 = 0;
    while (std::string::npos != pos2)
    {
        v.push_back(s.substr(pos1, pos2 - pos1));

        pos1 = pos2 + c.size();
        pos2 = s.find(c, pos1);
    }
    if (pos1 != s.length())
        v.push_back(s.substr(pos1));
    return 0;
}

int main()
{

    string line;
    int k = 1;
    

    //cout << "===============case1================" << endl;;
    //while (getline(cin, line))
    //{
    //    string out, x;
    //    stringstream ss(line);
    //    while (ss >> x)
    //    {
    //        cout << x << ";";
    //    }
    //    ++k;
    //    cout << endl;
    //    cout << "===============case" << k << "================" << endl;;
    //}

    ////测试矩阵形式的输入:
    //string input;
    //int n;
    ////cin >> n; //输入n行数据,如果后面用getline()后面的换行符不能处理
    //getline(cin, input);
    //stringstream ss(input);
    //ss >> n;
    //
    //vector<vector<int> > vec;
    //for (int i = 0; i < n;i++)
    //{
    //    getline(cin,input); //会将换行符当做一行
    //    stringstream ss(input);
    //    int x;
    //    vector<int> temp;
    //    while (ss>>x) //只能以空格处理分离
    //    {
    //        temp.push_back(x);
    //    }
    //    vec.push_back(temp);
    //}

    int row, col;
    getline(cin, line);
    stringstream ss(line);
    ss >> row >> col;
    getline(cin, line); //第二行
    stringstream s(line);
    string temp1, temp2, temp3;;
    vector<pair<pair<int,int>,pair<int,int>>> vec;
    while (getline(s, temp1, ';'))
    {
        vector<pair<int, int>> pair1;
        stringstream s3(temp1);
        while (getline(s3, temp2)) //以换行符结束,中间为空格
        {
            pair<int, int> pair2;
            stringstream s4(temp2);
            vector<int> res;
            while (getline(s4, temp3, ','))
            {
                res.push_back(stoi(temp3));
            }
            pair2.first = res[0];
            pair2.second = res[1];

            pair1.push_back(pair2);
        }

        vec.push_back(make_pair(pair1[0],pair1[1]));
    }


    return 0;
}

到此这篇关于C++ stringstream格式化输出输入详情的文章就介绍到这了,更多相关C++ stringstream格式化输出输入内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++ stringstream格式化输出输入详情

本文链接: https://www.lsjlt.com/news/157120.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++ stringstream格式化输出输入详情
    目录最近在笔试时经常遇见各种输入问题,于是细心总结一波;首先string str; cin>>str;遇到空格结束;于是乎产生了getline(),可与得到一行字符串;空...
    99+
    2022-11-12
  • C++ stringstream格式化输出输入分析
    这篇文章主要讲解了“C++ stringstream格式化输出输入分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++ stringstream格式化输出输入分析”吧!目录最近在笔试时经...
    99+
    2023-06-25
  • Python格式化输出详情
    目录1.%格式化1.1简单格式化,不使用可选参数1.2 复杂格式化,使用可选参数1.2.1参数 (name),用于选择指定的key1.2.2参数flags和width,对齐方式和宽度...
    99+
    2022-11-12
  • C++的输入与输出和格式化输出
    目录一、C++ 输入与输出 格式化输出1.cin与cout2.格式化输出2.1设置域宽及位数2.2按进制输出2.3设置填充符总结一、C++ 输入与输出 格式化输出 1.cin与cou...
    99+
    2022-11-12
  • python 3 用户输入和格式化输出
    # -*- coding:utf-8 -*- #用户输入 && 格式化输出 #getpass 模块是内置的,可以将输入的内容隐藏 import getpass username = input("username:") pa...
    99+
    2023-01-31
    用户 python
  • 格式化输出
    目录 占位符(掌握) format格式化(了解) f-String格式化(掌握) 程序中经常会有这样场景:要求用户输入信...
    99+
    2023-01-31
  • C语言之格式化屏幕输出详解
    目录题目1:请打印输出以下图案。题目2:分别按如下三种形式,编程输出九九乘法表。总结 在一些问题中,问题经常规定了屏幕输出的格式,让我们以固定的格式编程输出某些图案或表格。我们分别以...
    99+
    2022-11-12
  • C语言详解格式控制符scanf与printf的输入输出
    目录一、使用scanf输入和printf输出1、scanf的使用2、printf的使用二、常用输出格式1、%md2、%0md3、%.mf三、使用getchar输入putchar输出单...
    99+
    2022-11-13
  • 详解C语言printf()输出格式
    目录C语言printf()输出格式类型长度精度输出最少宽度标志C语言printf()输出格式 主要说明格式字符串的基本思想。 格式字符串纲要 [标志]    [输出最少宽度]    ...
    99+
    2023-03-19
    C语言printf()输出 C语言格式输出
  • C++的输入和输出流详解
    目录输入和输出流标准输入流小案例标准输出流文件读写总结输入和输出流 从键盘输入数据,输出到显示器屏幕。这种输入输出称为标准的输入输出,简称标准I/O。 从磁盘文件输入数据,数据输出到...
    99+
    2022-11-13
  • python输入,格式化输入,以及sca
    一,普通读入数据 有一下5种方式: n, m = [int(i) for i in temp.split(' ')] n, m = map(int,raw_input().split(' ')) import sys for lin...
    99+
    2023-01-31
    python sca
  • C++格式控制符scanf与printf的输入输出方法
    这篇文章主要介绍“C++格式控制符scanf与printf的输入输出方法”,在日常操作中,相信很多人在C++格式控制符scanf与printf的输入输出方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++...
    99+
    2023-06-30
  • pythn print格式化输出----
    pythn print格式化输出。   %r 用来做 debug 比较好,因为它会显示变量的原始数据(raw data),而其它的符号则是用来向用户显示输出的。   1. 打印字符串 print ("His name is %s"%("A...
    99+
    2023-01-30
    pythn print
  • python3 format格式化输出
    使用 format 方法,可以很方便的对字符串进行格式化输出 1. 使用参数位置格式 'my name is {0}, {0} age is {1}'.format('wang',10) >>> 'my name is ...
    99+
    2023-01-31
    format
  • C++char类型和输入输出优化
    目录1、char类型2、getchar、putchar、cin.get、cout.put3、输入输出中文1、char类型 char的全称是character,也就是字符的意思。顾名思...
    99+
    2022-11-12
  • ACM模式输入输出攻略 | C++篇
    文章目录 ACM模式输入输出攻略 | C++篇1.核心代码模式与ACM模式2.C++常用的输入输出方法2.1 输入(1)cin(2)getline()(3)getchar() 2.2 输出 3.案例(1)一维...
    99+
    2023-08-20
    c++ java 开发语言
  • 深入了解Golang中的格式化输出
    目录fmt格式化整数格式化浮点数格式化布尔类型格式化字符格式化字符串格式化指针格式化通用占位符宽度表示fmt Go语言用于控制文本输出常用的标准库是fmt fmt中主要用于输出的函数...
    99+
    2022-11-21
    Golang格式化输出 Golang格式化
  • C++输入流和输出流 超级详细
    目录1、简单介绍2、C++输入流和输出流1、简单介绍 C++ 又可以称为“带类的 C”,即可以理解为 C++ 是 C 语言的基础上增加了面向对象(类和对象)。在此基础上,学过 C 语...
    99+
    2022-11-12
  • JAVA语言的输入输出流详解(c)
    详解b中的例子,详解[@more@]  1. BufferedReader是Reader的一个子类,它具有缓冲的作用,避免了频繁的从物理设备中读取信息。它有以下两个构造函数:BufferedReader(Reader in) Buffere...
    99+
    2023-06-03
  • mybatis输出SQL格式化方式
    目录mybatis输出SQL格式化自定义拦截器配置拦截器配置日志级别mybatis sql语句格式化 trim prefix suffix1. select语句2. ins...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作