C++ 将行的前X个字符读入字符串

C++ 将行的前X个字符读入字符串,c++,string,parsing,C++,String,Parsing,我有一个格式如下的文件: Word1 num1 num2 Word2 Word3 num3 num4 在Word1和num1之间有15个空格,由Word1、Word2和Word3等单词使用 我想读取前15个字符,并将其放入字符串中,然后读取数字: string[0] = "Word1 "; number[0] = num1; number[1] = num2; string[1] = "Word2 Word3 "; number[2] = num

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

Word1          num1 num2
Word2 Word3    num3 num4
在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();

}

我不会为您编写代码,但基本思想是

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

    • 您的问题在于线路

      datafile >> products[i].product2_name;
      
      这只能读取到第一个空格。您需要像CharlesB建议的那样读取它,使用
      string::substr
      提取前15个字符,然后修剪


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

      你到目前为止都尝试了什么?到目前为止,我只是一次读一个单词,但这对我来说不起作用,因为如果有一个由2个或更多单词组成的字符串,它会将第一个单词读入一个字符串,然后将其余单词读入即将到来的整数,而不是同一个字符串,所以wh在INT应该是之前,它们返回0。基本上类似于“infle>>string>>number>>number”,如果您实际向我们展示代码会更好:)请您将标识符翻译成英语好吗?pr_kaina没有定义,文件的格式如何?用空格、制表符。。。?
      datafile >> products[i].product2_name;