zoukankan      html  css  js  c++  java
  • cin读取不知行列数的矩阵以及带逗号的整型数据

        摘要:如果输入中给出了一个矩阵的具体的行列数,那很好办,循环读取就行了,如果没有给你具体的行列数,而且输入中的整型数据之间还有逗号,那应该怎么来读取呢?下面给出具体代码:

      一、输入没有给出矩阵的具体行列数的情况

     1     ifstream in("input.txt");
     2     string s;
     3     int count=0, count1=0;// 分别记录行数和元素个数
     4     while (getline(in, s))
     5     {
     6         istringstream is(s);
     7         int inter;
     8         while (is >> inter)// 读取每行的所有数据
     9         {
    10             count1++;
    11             cout << inter << " ";            
    12         }
    13         count++;
    14         cout << endl;
    15     }    
    16     cout << count <<" "<<count1<< endl;
    测试数据
    1 2 6
    1 3 1
    1 4 5
    2 3 5
    2 5 3
    3 4 5
    3 5 6
    3 6 4
    4 6 2
    5 6 6

     输出为:

    即:总共有十行,共30个元素。

    二、输入中带有逗号的情况

      只要把逗号换成空格就行了,代码如下:

     1     ifstream in("input.txt");
     2     string s;
     3     int count=0, count1=0;// 分别记录行数和元素个数
     4     while (getline(in, s))
     5     {
     6         for (int i = 0; i < s.size(); i++)// 如果输入中有‘,’,将其换成空格
     7             if (s[i] == ',')
     8                 s[i] =' ';
     9         istringstream is(s);// //把s中的字符串存入字符串流中   
           //cout << is.str() << endl;// str():使istringstream对象返回一个string字符串 
    10 int inter; 11 while (is >> inter)// 读取每行的所有数据 12 { 13 count1++; 14 cout << inter << " "; 15 } 16 count++; 17 cout << endl; 18 } 19 cout << count <<" "<<count1<< endl;
    测试数据
    1,2,6
    1,3,1
    1,4,5
    2,3,5
    2,5,3
    3,4,5
    3,5,6
    3,6,4
    4,6,2
    5,6,6
    输出为:

        和上面的结果一样。

      

       总结:知道了行数和元素总个数,就能知道矩阵的行列数了!

      附:代码分析:

       ifstream in("input.txt");将对象与特定的文件关联起来。// #include<fstream>  // 里面定义了一个用于处理输出的ifstream类。

      getline(in, s);// 读取整行的输入,并丢弃换行符

      关于istringstream is(s);:

      C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含<sstream>这个头文件。
      istringstream类用于执行C++风格的串流的输入操作。
      ostringstream类用于执行C风格的串流的输出操作。
      strstream类同时可以支持C风格的串流的输入输出操作。

    C++的输入输出分为三种:

    (1)基于控制台的I/O

    (2)基于文件的I/O

    (3)基于字符串的I/O

  • 相关阅读:
    (转)if __name__ == '__main__' 如何正确理解?
    (转)Django配置mysql数据库
    (转)Python虚拟环境pyenv、venv(pyvenv)、virtualenv之间的区别,终于搞清楚了!
    找出Framework 4.0 新增的方法和新增的类(下)
    C# MBG 扩展方法类库 分享
    是技术还是态度,网易的视频Title
    不要返回null之EmptyFactory
    你知道这段代码的输出吗?
    C# 4.0 大数的运算,BigInteger
    CleanCode: 面向过程 PK 面向对象
  • 原文地址:https://www.cnblogs.com/smile233/p/8691229.html
Copyright © 2011-2022 走看看