将一行的前X个字符读取到字符串

时间:2012-05-14 11:33:37

标签: c++ string parsing

我有一个格式如下的文件:

Word1          num1 num2
Word2 Word3    num3 num4
<1>在Word1和num1之间有15个空格,由Word1,Word2和Word3等单词使用。

我想读取前15个字符并将它们放入字符串中,然后读取数字:

string[0] = "Word1          ";
number[0] = num1;
number[1] = num2;
string[1] = "Word2 Word3    ";
number[2] = num3;
number[3] = num4;
...

我目前用来从文件中读取数据的函数:

void read_data(){

ifstream datafile("U2.txt");

datafile>> product_count >> product2_count;

for (int i = 1; i <= product_count; i++) {
    datafile>> product_cost[i];
}

for (int i = 1; i <= product2_count; i++) {
    datafile>> products[i].product2_name;
    for (int j = 1; j <= product_count; j++) {
        datafile>> products[i].product_ammount[j];
    }
}

datafile.close();

}

和数据文件本身:

6 5
12 25 35 2 3 9
Salotos        5 1 0 0 2 1
Kepsnys        6 3 12 9 0 0
Gaiva          0 0 1 15 1 0
Ledai Miau     0 0 5 5 5 1
Tortas         1 2 1 1 1 1

2 个答案:

答案 0 :(得分:1)

我不会为你编写代码,但基本的想法是

  • 读取getline()std::string
  • 的一行
  • 取前15个字符,修剪它们以移除空间
  • 使用字符串的其余部分构建std::stringstream,然后执行sstream >> num1[i] >> num2[i](其中numX是int数组,i是行索引。

答案 1 :(得分:1)

你的问题在于

datafile >> products[i].product2_name;

只能读取第一个空格。您需要像CharlesB建议的那样阅读它,使用string::substr提取前15个字符,然后修剪。 See here

我强烈怀疑你的for循环应该从0而不是1开始。