我正在用C ++编写一个程序来从文本文件中获取输入(日期和当天的高/低温度),将日期和临时值分成两个单独的数组。我把这个过程放下了;但是,我似乎无法恰当地分割字符串。我已经尝试了使用getline()和.get的不同方法,但我需要将字符串保留为STRINGS,而不是字符数组。我已经使用向量和strtock查看并阅读了类似问题的答案,并且只有一个问题:我仍然相当新,我对它们的看法越多,我就越困惑。
如果我要使用该方法来解决我的问题,我只需要指出如何应用它的正确方向。为我的noobishness道歉,用C ++解决一个问题的所有不同方法很容易被淹没(这就是我喜欢使用它的原因。))!
来自文字的样本:
等
日期需要存储在一个数组中,临时值(包括高和低)存储在另一个数组中。
这是我所拥有的(未完成,但仍可参考)
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++;
}
谢谢大家。
答案 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}}完成,它读取到遇到的第一个空格(制表,空格或换行符)并将值存储在右操作数内。