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

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

     ifstream in("input.txt");
string s;
int count=, count1=;// 分别记录行数和元素个数
while (getline(in, s))
{
istringstream is(s);
int inter;
while (is >> inter)// 读取每行的所有数据
{
count1++;
cout << inter << " ";
}
count++;
cout << endl;
}
cout << count <<" "<<count1<< endl;
测试数据

输出为:

cin读取不知行列数的矩阵以及带逗号的整型数据-LMLPHP

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

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

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

     ifstream in("input.txt");
string s;
int count=, count1=;// 分别记录行数和元素个数
while (getline(in, s))
{
for (int i = ; i < s.size(); i++)// 如果输入中有‘,’,将其换成空格
if (s[i] == ',')
s[i] =' ';
istringstream is(s);// //把s中的字符串存入字符串流中   
       //cout << is.str() << endl;// str():使istringstream对象返回一个string字符串 
int inter;
while (is >> inter)// 读取每行的所有数据
{
count1++;
cout << inter << " ";
}
count++;
cout << endl;
}
cout << count <<" "<<count1<< endl;
测试数据
,,
,,
,,
,,
,,
,,
,,
,,
,,
,,6
输出为:
cin读取不知行列数的矩阵以及带逗号的整型数据-LMLPHP

    和上面的结果一样。

  

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

  附:代码分析:

   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

cin读取不知行列数的矩阵以及带逗号的整型数据-LMLPHP

(2)基于文件的I/O

cin读取不知行列数的矩阵以及带逗号的整型数据-LMLPHP

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

cin读取不知行列数的矩阵以及带逗号的整型数据-LMLPHP

04-28 20:49