C ++从ifstream拆分字符串并将它们放在单独的数组中

时间:2014-04-13 00:13:40

标签: c++ arrays string ifstream

我正在用C ++编写一个程序来从文本文件中获取输入(日期和当天的高/低温度),将日期和临时值分成两个单独的数组。我把这个过程放下了;但是,我似乎无法恰当地分割字符串。我已经尝试了使用getline()和.get的不同方法,但我需要将字符串保留为STRINGS,而不是字符数组。我已经使用向量和strtock查看并阅读了类似问题的答案,并且只有一个问题:我仍然相当新,我对它们的看法越多,我就越困惑。

如果我要使用该方法来解决我的问题,我只需要指出如何应用它的正确方向。为我的noobishness道歉,用C ++解决一个问题的所有不同方法很容易被淹没(这就是我喜欢使用它的原因。))!

来自文字的样本:

  • 10/12/2007 56 87
  • 10/13/2007 66 77
  • 10/14/2007 65 69

日期需要存储在一个数组中,临时值(包括高和低)存储在另一个数组中。

这是我所拥有的(未完成,但仍可参考)

int main()

//Open file to be read
ifstream textTemperatures;
textTemperatures.open("temps1.txt");
//Initialize arrays.
const int DAYS_ARRAY_SIZE = 32,
          TEMPS_ARRAY_SIZE = 65;
string daysArray[DAYS_ARRAY_SIZE];
int tempsArray[TEMPS_ARRAY_SIZE];
int count = 0;

while(count < DAYS_ARRAY_SIZE && !textTemperatures.eof())
{   
    getline(textTemperatures, daysArray[count]);
    cout << daysArray[count] << endl;
    count++;
}   

谢谢大家。

2 个答案:

答案 0 :(得分:1)

尝试以下

#include <iostream>
#include <fstream>
#include <sstream>

//... 

std::ifstream textTemperatures( "temps1.txt" );

const int DAYS_ARRAY_SIZE = 32;


std::string daysArray[DAYS_ARRAY_SIZE] = {};
int tempsArray[2 * DAYS_ARRAY_SIZE] = {};

int count = 0;

std::string line;
while ( count < DAYS_ARRAY_SIZE && std::getline( textTemperatures, line ) )
{
   std::istringstream is( line );
   is >> daysArray[count];
   is >> tempsArray[2 * count];
   is >> tempsArray[2 * count + 1];
}   

答案 1 :(得分:0)

这是一个读取格式化输入的简单程序。您可以使用std :: ifstream轻松替换std :: cin,并使用循环内的数据执行任何操作。

#include <iostream>
#include <string>
#include <vector>

int main ()
{
    std::vector<std::string> dates;
    std::vector<int> temperatures;
    std::string date;
    int low, high;

    while ((std::cin >> date >> low >> high))
    {
        dates.push_back(date);
        temperatures.push_back(low);
        temperatures.push_back(high);
    }
}

这里的魔力由std::cin的{​​{1}}完成,它读取到遇到的第一个空格(制表,空格或换行符)并将值存储在右操作数内。