Как преобразовать несколько чисел в строке в целые - PullRequest
0 голосов
/ 03 мая 2018

Я не совсем понимаю, как взять несколько строк, в которых есть числа, и преобразовать их в целое число. У меня есть несколько строк строк, которые хранятся в данных в целых, а затем вставьте их в двухмерные массивы, называемые значениями. Аналогичный вопрос был опубликован ранее в StackOverflow; однако это, кажется, не работает для меня. Я распечатал, что каждая строка в данных, каждая строка в данных выглядит следующим образом.

 75
 95 64
 17 42 82
 18 35 87 10

Однако, когда я выводю числа из значения, используя два цикла for в main, он выводит как это.

75 0 0 0 95 64 0 0

95 64 0 0 17 42 82 0

17 42 82 0 18 35 87 10

18 35 87 10 0 0 0 0

Я обнаружил, что в значениях массива есть 8 столбцов и 8 элементов, когда я печатал sizeof (values) и sizeof (values ​​[0]); однако, похоже, что программа завершена как последний оператор печати, где я печатаю привет не происходит. Я предоставил код, который я использую ниже. Я хотел бы знать, почему это происходит и как я могу это исправить? Спасибо.

//const char DELIMITER = ' ';

int **values, // This is your 2D array of values, read from the file.
    **sums;   // This is your 2D array of partial sums, used in DP.

int num_rows; // num_rows tells you how many rows the 2D array has.
          // The first row has 1 column, the second row has 2 columns, and
          // so on...

bool load_values_from_file(const string &filename) {
ifstream input_file(filename.c_str());
if (!input_file) {
    cerr << "Error: Cannot open file '" << filename << "'." << endl;
    return false;
}
input_file.exceptions(ifstream::badbit);
string line;
vector<string> data;
try {
    while (getline(input_file, line)) {
        data.push_back(line);
        num_rows ++;
    }
    input_file.close();
} catch (const ifstream::failure &f) {
    cerr << "Error: An I/O error occurred reading '" << filename << "'.";
    return false;
}
for(int x = 0; x < data.size(); x++){
    cout << data[x] << endl;
}

///1022925/preobrazovat-stroku-soderzhaschuy-neskolko-chisel-v-tselye-chisla
//Help on making multiple numbers in a string into seperate ints
values = new int*[num_rows];
vector<int> v;
for(int y = 0; y < data.size(); y++){
    istringstream stream(data[y]);
    values[y] = new int[y + 1];
    int z = 0;

    while(1) {
       int n;
       stream >> n;
       if(!stream)
          break;
       values[y][z] = n;
       z++;
    }
    z = 0;
}
sums = values;

return true;
}

int main(int argc, char * const argv[]) {

if (argc != 2) {
    cerr << "Usage: " << argv[0] << " <filename>" << endl;
    return 1;
}
string filename(argv[1]);
if (!load_values_from_file(filename)) {
    return 1;
}

cout << sizeof(values) << endl;
cout << sizeof(values[0]) << endl;

for(int x = 0; x < sizeof(values); x++){
    for(int y = 0; y < sizeof(values[x]); y++){
        cout << values[x][y] << endl;
    }
    cout << endl;
}
cout << "hello" << endl;


return 0;

}

1 Ответ

0 голосов
/ 03 мая 2018

Смотрите это:

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <algorithm>

using namespace std;
int main()
{
    string str;
    ifstream fs("D:\\Myfolder\\try.txt", ios::in);
    stringstream ss;
    std::string item;
    if (fs.is_open())
    {       
        ss << fs.rdbuf();
        str = ss.str();
        cout << str << endl;
        fs.close();
    }

    cout << "\n\n Output \n\n";
    while (std::getline(ss, item, ' '))
    {
        cout << std::atoi(item.c_str()) <<" ";
    }

    return 0;
}
...