使用循环从文本文件中提取字符串数据

时间:2014-06-13 18:53:13

标签: c++

我正在尝试编写一个代码,该代码从.txt文件中获取45个名称的列表,然后将它们全部放在一个数组中。然后程序应按字母顺序排列并为用户显示它们。我对我的大多数代码都很有信心,但是当我运行程序时,它并没有正确地将名字抓到数组中。运行时,它将显示名称应为45个空格,但不显示名称本身。

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

void sortStudents(string students[], int);

int main()

{

    ifstream namesOfKids;
    namesOfKids.open("LineUp.txt");

    const int ARRAY_SIZE = 45;
    string students[ARRAY_SIZE];
    int count = 0;

    while (count < ARRAY_SIZE)
    {
        string tempName;
        namesOfKids >> tempName;
        students[count] = tempName;
        cout << students[count] << endl;
        count++;
    }

    sortStudents(students, 45);

    cout << "Here is the list of students from the class in\n";
    cout << "alphabetical order\n\n";
    for (count = 0; count < ARRAY_SIZE; count++)
        cout << students[count] << endl;

    cout << "\nThank you for running the program!\n Press any key to exit" << endl;
    cin.get();

    namesOfKids.close();

    return 0;
}

void sortStudents(string students[], int size)
{
    bool swap;

    do
    {
        swap = false;
        for (int count = 0; count < (size - 1); count++)
        {
            if (students[count] > students[count +1])
            {
                students[count].swap(students[count+1]);
                swap = true;
            }
        }
    }while (swap);
}

作为旁注,这是我第一次在这个网站上发帖,所以如果格式有任何问题,请告诉我,我很乐意解决它们。

2 个答案:

答案 0 :(得分:1)

听起来没有打开文件。你可以用以下方法测试:

namesOfKids.is_open()

如果返回false,则打开文件时出现问题。

答案 1 :(得分:0)

我不确定您的文件是如何格式化的,但以下代码是每行1个名称:

如果名称之间有分隔符:

name1;name2;name3;

然后你将使用:

while (getline(namesOfKids, tempName, ';'))

否则使用以下内容:

 string tempName;
  ifstream namesOfKids;
  namesOfKids.open("LineUp.txt");

  const int ARRAY_SIZE = 45;
  string students[ARRAY_SIZE];
  int count = 0;

  if(namesOfKids.is_open()){
    while (getline(namesOfKids, tempName))
    {
      students[count] = tempName;
      cout << students[count] << endl;
      count++;
    }
  }