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

C++ stringstream格式化输出输入分析

2023-06-25 14:06:04 740人浏览 安东尼
摘要

这篇文章主要讲解了“c++ stringstream格式化输出输入分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++ stringstream格式化输出输入分析”吧!目录最近在笔试时经

这篇文章主要讲解了“c++ stringstream格式化输出输入分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++ stringstream格式化输出输入分析”吧!

目录

    最近在笔试时经常遇见各种输入问题,于是细心总结一波;首先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本身是没有空格的字符串

    C++ stringstream格式化输出输入分析

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

    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;}

    输出:

    C++ stringstream格式化输出输入分析

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

    5 01 2 30 40 40 41 2 3int 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为拆分结果//函数返回值:正常返回0int 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/305442.html(转载时请注明来源链接)

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

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

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

    下载Word文档
    猜你喜欢
    • C++ stringstream格式化输出输入分析
      这篇文章主要讲解了“C++ stringstream格式化输出输入分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++ stringstream格式化输出输入分析”吧!目录最近在笔试时经...
      99+
      2023-06-25
    • C++ stringstream格式化输出输入详情
      目录最近在笔试时经常遇见各种输入问题,于是细心总结一波;首先string str; cin>>str;遇到空格结束;于是乎产生了getline(),可与得到一行字符串;空...
      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
    • C++输入和输出流的示例分析
      这篇文章给大家分享的是有关C++输入和输出流的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。输入和输出流从键盘输入数据,输出到显示器屏幕。这种输入输出称为标准的输入输出,简称标准I/O。从磁盘文件输入数据...
      99+
      2023-06-29
    • 格式化输出
      目录 占位符(掌握) format格式化(了解) f-String格式化(掌握) 程序中经常会有这样场景:要求用户输入信...
      99+
      2023-01-31
    • Python字符串格式化输出方法分析
      本文实例分析了Python字符串格式化输出方法。分享给大家供大家参考,具体如下: 我们格式化构建字符串可以有3种方法: 1 元组占位符 m = 'python' astr = 'i love %s' %...
      99+
      2022-06-04
      字符串 方法 Python
    • 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格式化
    • mybatis输出SQL格式化方式
      目录mybatis输出SQL格式化自定义拦截器配置拦截器配置日志级别mybatis sql语句格式化 trim prefix suffix1. select语句2. ins...
      99+
      2022-11-12
    • Pythonformat()格式化输出方法
      自 Python 2.6 版本开始,字符串类型(str)提供了 format() 方法对字符串进行格式化,本节就来学习此方法。 format() 方法的语法格式如下: str....
      99+
      2022-11-12
    • Python学习 :格式化输出
      方式一:使用占位符 %   常用占位符:% s   (s = string 字符串)          % d   (d = digit 整数(十进制))        %  f   ( f = float  浮点数)   name =...
      99+
      2023-01-30
      Python
    • Python格式化输出详情
      目录1.%格式化1.1简单格式化,不使用可选参数1.2 复杂格式化,使用可选参数1.2.1参数 (name),用于选择指定的key1.2.2参数flags和width,对齐方式和宽度...
      99+
      2022-11-12
    • Python格式化输出总结
      格式化输出一,使用%占位符name = input("请输入您的姓名") age = int(input("请输入您的年龄")) job = input("请输入您的工作") hobby = input("请输入您的爱好") msg = '...
      99+
      2023-01-31
      Python
    • Python【3】:格式化 输出 whi
      (占位符) % (求余数) 示例 name = input("请输入你的名字") age =int(input("请输入你的年龄")) ...
      99+
      2023-01-31
      Python whi
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作