Другие языки программирования и технологии

Как в С++ правильно преобразовать массив char в int?Как подправить код?

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<fstream>

#define N 100

using namespace std;

int main()
{
char array[N];
int DigitArray[N];
ifstream first("all.txt");
first.getline(array,N);
cout << array;

int i;
for(i=0;i<n;i++)>!=' ')
DigitArray=atoi(&array);
}

cout << endl;
for(i=0;i<n;i++)>!=0)
cout << DigitArray << " ";
}

first.close();

system("PAUSE>null");
return 0;
}
ZM
Zhenya Mikhailov
532
Непонятно, зачем тебе это преобразование и что из чего ты хочешь получить. Преобразовывать можно по-разному. for(i=0;i< N;i++)DigitArray[ i]=array[ i]; преобразует коды, хранящиеся в char, в коды int, но у меня есть подозрение, что ты хочешь записать в массив DigitArray числа, цифровые обозначения которых хранятся в массиве array. Тогда все иначе и зависит от формата хранения этих чисел в array.
Жилкелды Абилкаримов
Жилкелды Абилкаримов
84 312
Лучший ответ
Если файл хранит только числа целого типа, то возможен такой вариант решения.. .

#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
int main() {
    ifstream ifs;
    ifs.open("numbers.txt", ifstream::in);
    if (ifs.is_open()) {
        int next;
        vector<int> numbers;
        while (!ifs.eof()) {
            ifs >> next;
            numbers.push_back(next);
        }
        ifs.close();
        size_t size = numbers.size();
        for (rsize_t n = 0; n < size; n++) cout << numbers.at(n) << ' ';
        cout << endl;
    } else {
        locale::global(locale(""));
        cout << " Файл numbers.txt не существует по указанному адресу! \n";
    }
    cin.get();
    return 0;
}
Ну, конечно же, не так. Краб прав, из вопроса не очень понятно, что именно во что именно вы хотите преобразовать. Если ты хочешь преобразовать массив символов в массив кодов этих символов в формате int, то надо делать так, как пишет Краб. Если в символьном массиве содержится какое-то одно число, которое надо преобразовать в формат int, тогда никакого цикла тут вообще не нужно, но тогда и результат будет в виде одного числа, а не в виде массива. Если каждый символ надо преобразовать в однозначное число, тогда что-то вроде этого:

for(int i=0;i<n;i++)
DigitArray [ i ] = array [ i ] - '0';

Если в символьном массиве несколько чисел, разделённых определённым разделителем, каждое из которых надо преобразовать в число, то сначала надо выделить каждое из этих чисел, а зачем преобразовать его в int.
А не надо ничего преобразовывать. Поток first сам знает, как из файла получить числа. Нужно только написать, что читаем целые.
Я уже писал, как это делается.
Я в С++ почти не разбираюсь, но ИМХО, если надо сменить тип, то надо указывать в значении переменной.
Игорь Спирков
Игорь Спирков
8 221