Несмотря на то, что это программа Project Euler, следующий код на самом деле не имеет к ней большого отношения. Я хочу добавить 50 100-значных чисел, и я назначаю каждую цифру каждого числа элементу в массиве addends[100][50]. Затем я складывал каждую цифру/место по отдельности и переносил дополнительные цифры. Числа считываются из текстового файла с именем Input.txt
, и он просто содержит все числа. http://projecteuler.net/problem=13
У меня возникли проблемы с назначением символов элементам массива строк (string numbers[100][50]
) из входного потока файла (<fstream>
). Более подробно проблема описана в комментариях:
«[для 1-го цикла] Этот цикл присваивает номер каждой строке в массиве строк. Даже если второе число (50) ничего не делает (кажется, что оно переопределяется std::string; см. объявление переменной), он должен быть там, чтобы цикл работал. Та же «логика» для цикла; «j» ничего не делает, но должен быть там, чтобы цикл работал?»
А также (для 2-го цикла) «Этот цикл заполняет массив «addends [100] [50]» из соответствующего элемента массива строк. Если я попытаюсь вызвать «char_to_int ()» с массивом «числа [i] [j]», компилятор жалуется, что входные данные имеют неправильный тип данных. Добавление переменной «k» заставляет цикл работать для одного запуска, но в конечном итоге происходит сбой во втором цикле (с использованием «numbers[i][j ][k]"). Итак, я попробовал "char_to_int((numbers[i][j]).c_str())", но компилятор жалуется, что "const char *" несовместим с "char". Добавление указателя разрешает проблема ("char_to_int( *( (numbers[i][j]).c_str() ) )")), но позже программа все равно вылетает." Я вынул некоторый код, который не имеет значения, чтобы сделать его более читаемым.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int char_to_int(char chInput);
int main()
{
int placeholder; //so console doesn't close immediately upon finish
int sum[102] = {0}; // 100+2, 100 places + 2 places from carrying over
int addends[100][50] = {0};
string numbers[100][50];
ifstream input("Input.txt");
/* This loop assigns a number to every string in the string array. Even
* though the second number (50) doesn't do anything (it seems to be
* overridden by std::string; see variable declaration), it needs to be
* there for the loop to work. Same "logic" for the loop; "j" doesn't do
* anything but needs to be there??? Confused :-\
*/
for (int i = 0; i < 100; i++)
for (int j = 0; j < 1; j++)
getline(input, numbers[i][j]);
/* This loop fills in the "addends[100][50]" array from the corresponding
* string array element. If I try to call "char_to_int()" with the array
* "numbers[i][j]", the compliler complains that the input isn't of the
* right data type. Adding a variable "k" makes the loop work for one run,
* but eventually crashes on the second loop (using "numbers[i][j][k]").
* So I tried "char_to_int((numbers[i][j]).c_str())", but the compiler
* complains that "const char *" is incompatible with "char". Adding a
* pointer resolves the issue ("char_to_int( *( (numbers[i][j]).c_str() ) )"),
* but the program still crashes on the second loop through.
*/
for (int i = 0; i < 100; i++)
for (int j = 0; j < 50; j++)
for (int k = 0; k < 1; k++) //used when the variable "k" was being used
addends[i][j] = char_to_int( (numbers[i][j]).c_str() );
return 0;
}
Код не закончен; Я решил не продолжать, так как мне (очевидно) нужно сначала исправить это.