преобразовать массив символов в массив целых чисел в C - PullRequest
0 голосов
/ 27 апреля 2011

Я передаю аргумент программе на C:

имя_программы 1234

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

    int     length_of_input = 0;    
    char*   input           = argv[1];


    while(input[length_of_input]) {
        //convert input from array of char to int
        length_of_input++;
    }
}

Я хочу использовать каждую цифру аргументапередается в функцию отдельно как целое число.atoi (input []) выдает ошибку во время компиляции.

Этот код не компилируется:

while(input[length_of_input]) {
    int temp = atoi(input[length_of_input]);
    printf("char %i: %i\n", length_of_input, temp);
    length_of_input++;
}

Ответы [ 4 ]

4 голосов
/ 27 апреля 2011
int i;
for (i = 0; input[i] != 0; i++){
    output[i] = input[i] - '0';
}
1 голос
/ 27 апреля 2011

Сначала вы должны проверить, сколько места вам нужно выделить для целочисленного массива. Это можно сделать с помощью функции strlen() или итерации по строке и проверки количества найденных допустимых символов. Затем вы должны перебрать строку и преобразовать каждый (действительный) символ в эквивалентное целое число. Здесь сложно использовать семейство функций atoi() или scanf(), поскольку они исключают массив в качестве входных данных. Лучшим решением было бы написать собственную небольшую функцию конвертера или фрагмент для преобразования.

Вот небольшой пример приложения, которое преобразует строку в массив целых. Если символ не является допустимой десятичной цифрой, -1 помещается в массив.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int length, i;
    int *array;
    char *input = argv[1];

    /* check if there is input */
    if(input == NULL) return EXIT_FAILURE;

    /* check the length of the input */
    length = strlen(input);
    if(length < 1) return EXIT_FAILURE;

    /* allocate space for the int array */
    array = malloc(length * sizeof *array);
    if(array == NULL) return EXIT_FAILURE;

    /* convert string to integer array */
    for(i = 0; i < length; ++i) {
        if(input[i] >= '0' && input[i] <= '9')
            array[i] = input[i] - '0';
        else
            array[i] = -1; /* not a number */
    }

    /* print results */
    for(i = 0; i < length; ++i)
        printf("%d\n", array[i]);

    /* free the allocated memory */
    free(array);

    return EXIT_SUCCESS;
}

Также проверьте эти вопросы:

1 голос
/ 27 апреля 2011

Поскольку это домашнее задание, вы также можете сделать

output[i] = input[i] - '0';

, но будьте осторожны, если input[i] на самом деле является цифрой (то есть между '0' и '9')!

0 голосов
/ 27 апреля 2011

Вы можете проверить, является ли аргумент числом с isdigit ()

http://www.cplusplus.com/reference/clibrary/cctype/isdigit/

и используйте функцию Atoi.

http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/

И будьте осторожны при использовании

char*   input           = argv[1];

скопировать строку из argv на вход (после использования malloc), лучше.

...