将并行数组与txt文件分开

詹姆森

我是一个非常新手的程序员,我正在尝试制作一个程序,以读取一个txt文件,其中包含5个学生的姓名(仅名字)以及每个学生的4个考试成绩。我正在尝试将名称读入一个名为“ students”的数组中,然后将分数读入4个名为test1,test2,test3,test4的单独数组中,然后从监视器显示它。该文件如下所示:

史蒂夫78 65 82 73

肖恩87 90 79 82

安妮92 90 89 96

卡罗尔72 65 65 60

凯西34 50 45 20

我很难分解数组并组织它们。有人能帮我吗?请记住,我是新手,所以我对编程不了解很多。

到目前为止,这是我的代码:

#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include <ctime>
#define over2 "\t\t"
#define over3 "\t\t\t"
#define over4 "\t\t\t\t"
#define down5 "\n\n\n\n\n"


using namespace std;



int main(int argc, char *argv[])
{

    
    ifstream inputFile;
    
    
    //Constant for max string size
    const int SIZE = 5;
     

    //Constant for the scores
    string names[SIZE], fileName, line, test1[SIZE], test2[SIZE], test3[SIZE], test4[SIZE];


    //input section, user enters their file name
    cout << down5 << down5 << over2 << "Please enter your file name: ";
    cin >> fileName;
    system("CLS");
    

    

    //open the file containing the responses
    inputFile.open(fileName.c_str());
     cout << endl;

    //kicks you out if file isn't found
    if (inputFile)
    {
        for(int i = 0; i < SIZE; i++)
        {  
           getline(inputFile, line);
            names[i] = line;
            getline(inputFile, line);
            test1[i] = line;
            getline(inputFile, line);
            test2[i] = line;
            getline(inputFile, line);
            test3[i] = line;
            getline(inputFile, line);
            test4[i] = line;
        }   
            inputFile.close();  
    }
    cout << down5 << over3 << "Student\tTest1\tTest2\tTest3\tTest4\n";
    cout << over3 << "-------\t-----\t-----\t-----\t-----\n";   
    for(int i = 0; i < SIZE; i++)
    {
        cout << over3 << names[i] << endl;
        cout << over3 << test1[i] << endl;
        cout << over3 << test2[i] << endl;
        cout << over3 << test3[i] << endl;
        cout << over3 << test4[i] << endl;
        
    }
    return 0;
}
GoBusto

让我们看一下您要读取的文件的结构:

Steve 78 65 82 73
Shawn 87 90 79 82
Annie 92 90 89 96
Carol 72 65 65 60
Kathy 34 50 45 20

数据格式可以描述如下:

  • 每行代表一个“记录”。
  • 每个“记录”包含多个列。
  • 列由空格分隔。

您当前正在使用getline()

for(int i = 0; i < SIZE; i++)
{  
  getline(inputFile, line);
  names[i] = line;
  getline(inputFile, line);
  test1[i] = line;
  getline(inputFile, line);
  test2[i] = line;
  getline(inputFile, line);
  test3[i] = line;
  getline(inputFile, line);
  test4[i] = line;
}   

...而您实际上想为每条记录读一行并将其拆分:

for (int i = 0; i < SIZE; i++)
{
  string line;
  size_t start = 0;
  // For each line, attempt to read 5 columns:
  getline(inputFile, line);
  names[i] = get_column(line, start);
  test1[i] = get_column(line, start);
  test2[i] = get_column(line, start);
  test3[i] = get_column(line, start);
  test4[i] = get_column(line, start);
}

这是原始代码的修改后的版本,该代码如上所述将每一行拆分:

#include <cctype>
#include <fstream>
#include <iostream>
#include <string>

using namespace std;

static string get_column(string line, size_t &pos)
{
  size_t len = 0;
  // Skip any leading whitespace characters.
  while (isspace(line.c_str()[pos])) { ++pos; }
  // Count the number of non-whitespace characters that follow.
  while (!isspace(line.c_str()[pos+len]) && line.c_str()[pos+len]) { ++len; }
  // Extract those characters as a new string.
  string result = line.substr(pos, len);
  // Update the "start" position (for the next time this function is called).
  pos += len;
  // Return the string.
  return result;
}

int main()
{

  const int SIZE = 5;
  string names[SIZE], test1[SIZE], test2[SIZE], test3[SIZE], test4[SIZE];

  // Ask the user to enter a file name.
  cout << "Please enter your file name: ";
  string fileName;
  cin >> fileName;

  // Open the file and read the data.
  ifstream inputFile(fileName.c_str());
  if (!inputFile.is_open()) { return 0; }

  for (int i = 0; i < SIZE; i++)
  {
    string line;
    size_t start = 0;
    // For each line, attempt to read 5 columns:
    getline(inputFile, line);
    names[i] = get_column(line, start);
    test1[i] = get_column(line, start);
    test2[i] = get_column(line, start);
    test3[i] = get_column(line, start);
    test4[i] = get_column(line, start);
  }

  inputFile.close();

  // Display the data.
  cout << "Student\tTest1\tTest2\tTest3\tTest4" << endl;
  cout << "-------\t-----\t-----\t-----\t-----" << endl;

  for(int i = 0; i < SIZE; i++)
  {
    cout << names[i] << "\t";
    cout << test1[i] << "\t";
    cout << test2[i] << "\t";
    cout << test3[i] << "\t";
    cout << test4[i] << endl;
  }

}

运行该程序将产生以下输出:

Please enter your file name: textfile.txt
Student Test1 Test2 Test3 Test4
------- ----- ----- ----- -----
Steve   78    65    82    73
Shawn   87    90    79    82
Annie   92    90    89    96
Carol   72    65    65    60
Kathy   34    50    45    20

请注意,该get_column()函数处理多个空格或太短的行,因此该文件:

Steve 78     65 82 73
Shawn   87 90 
Annie 92 90 89 96
Carol 72 
Kathy 34 50   45 20

...产生以下输出:

Please enter your file name: textfile.txt
Student Test1 Test2 Test3 Test4
------- ----- ----- ----- -----
Steve   78    65    82    73
Shawn   87    90
Annie   92    90    89    96
Carol   72
Kathy   34    50    45    20

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将输出表和5个并行数组从主类打印到.txt文件?

来自分类Dev

将数组与主脚本文件分开

来自分类Dev

Python:将并行数组重塑为训练集

来自分类Dev

如何将预键入的文件转换为并行数组并在c ++中找到最大的数字?

来自分类Dev

Ruby中的并行数组

来自分类Dev

如何编写并行数组

来自分类Dev

读取txt。以(int float float string)的格式并将值放入并行数组

来自分类Dev

如何在Java中没有并行项的情况下将并行数组中的元素复制到新的并行数组中?

来自分类Dev

将并行数组组合成单个对象数组并进行排序

来自分类Dev

卷曲url txt文件,但是将每个url与单个文件分开grep

来自分类Dev

如何将数据从并行数组传输到文本框?

来自分类Dev

Visual Basic分配的并行数组

来自分类Dev

基于并行数组的python排序

来自分类Dev

重新排列并行数组

来自分类Dev

排序和搜索并行数组?

来自分类Dev

在 hive 中压缩并行数组

来自分类Dev

将.txt文件拆分为Javascript数组

来自分类Dev

将数组导出到txt文件

来自分类Dev

以与系统无关的方式将文件读取到行数组中

来自分类Dev

将numpy数组的每一行保存到文件的单独行中,而不是将其分开

来自分类Dev

如何使用python将.csv文件中的行数据提取到单独的.txt文件中?

来自分类Dev

使用并行数组列表从数组创建直方图

来自分类Dev

为什么我的程序在尝试将值存储在并行数组中时以“进程以值 3221225477 退出”而终止?

来自分类Dev

将files.txt中的行数分配给数组length-java

来自分类Dev

将字符串与dat文件分开

来自分类Dev

将Word图表的数据与Excel文件分开

来自分类Dev

Intellij将Java与Groovy文件区分开

来自分类Dev

将一个数组拆分为两个并行数组,或者在C#中直接读取为两个数组

来自分类Dev

Python在txt文件中合并行

Related 相关文章

  1. 1

    如何将输出表和5个并行数组从主类打印到.txt文件?

  2. 2

    将数组与主脚本文件分开

  3. 3

    Python:将并行数组重塑为训练集

  4. 4

    如何将预键入的文件转换为并行数组并在c ++中找到最大的数字?

  5. 5

    Ruby中的并行数组

  6. 6

    如何编写并行数组

  7. 7

    读取txt。以(int float float string)的格式并将值放入并行数组

  8. 8

    如何在Java中没有并行项的情况下将并行数组中的元素复制到新的并行数组中?

  9. 9

    将并行数组组合成单个对象数组并进行排序

  10. 10

    卷曲url txt文件,但是将每个url与单个文件分开grep

  11. 11

    如何将数据从并行数组传输到文本框?

  12. 12

    Visual Basic分配的并行数组

  13. 13

    基于并行数组的python排序

  14. 14

    重新排列并行数组

  15. 15

    排序和搜索并行数组?

  16. 16

    在 hive 中压缩并行数组

  17. 17

    将.txt文件拆分为Javascript数组

  18. 18

    将数组导出到txt文件

  19. 19

    以与系统无关的方式将文件读取到行数组中

  20. 20

    将numpy数组的每一行保存到文件的单独行中,而不是将其分开

  21. 21

    如何使用python将.csv文件中的行数据提取到单独的.txt文件中?

  22. 22

    使用并行数组列表从数组创建直方图

  23. 23

    为什么我的程序在尝试将值存储在并行数组中时以“进程以值 3221225477 退出”而终止?

  24. 24

    将files.txt中的行数分配给数组length-java

  25. 25

    将字符串与dat文件分开

  26. 26

    将Word图表的数据与Excel文件分开

  27. 27

    Intellij将Java与Groovy文件区分开

  28. 28

    将一个数组拆分为两个并行数组,或者在C#中直接读取为两个数组

  29. 29

    Python在txt文件中合并行

热门标签

归档