Char и Int в одном массиве - PullRequest
       10

Char и Int в одном массиве

1 голос
/ 08 ноября 2011

Я хочу, чтобы в одном массиве были символы и целые числа. То, что я пытаюсь сделать, это иметь от 1 до 9 в моем массиве, и пользователь выбирает, какое число заменить на букву X. Как я могу это сделать? Я предполагаю, что не могу передать символы в массив, который называется int array[8]; Так есть ли способ иметь в массиве как целые, так и символы?

Ответы [ 6 ]

4 голосов
/ 08 ноября 2011

В c ++ int s и char s почти одно и то же. Они оба хранятся в виде чисел, только с разным разрешением.

int array[2];
array[0] = 100;
array[1] = 'c';

printf("%d", array[0]) //Prints the number at index zero.

//Is it %c to print a char?
printf("%c", array[1]) //Prints the number at index zero as it's equivalent char.
3 голосов
/ 08 ноября 2011

Почему бы вам просто не использовать массив символов?

Вы можете сделать

char characters[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', 0}; // last one is NULL terminator

int replace = 1;
cout << "Enter the number you want to replace with X: ";
cin >> replace;

assert(replace > 0 && replace < 10); // or otherwise check validity of input

characters[replace - 1] = 'X';

// print the string
cout << characters;

// if the user entered 5, it would print
// 1234X6789
0 голосов
/ 26 декабря 2011

Самое простое решение - использовать -1 вместо X, предполагая, что в вашем массиве нет отрицательных чисел.Я делал это раньше.

0 голосов
/ 08 ноября 2011

Вы можете рассматривать ваши цифры как символы

    char mychar[10];
    for ( int i = 0; i < 10; ++i )
    {
        mychar[i] = '0' + i;
    }


    //Assume you read it 
    int userInput = 9;
    mychar[userInput-1] = 'X';
0 голосов
/ 08 ноября 2011

Как уже упоминалось, char будет повышен до int, когда вы назначите элементы массива int[] со значениями char. Вам придется использовать явное приведение при чтении из этого массива.

Т.е., следующие работы

int a[10];
char c='X';

a[0] = c;
c = (char) a[0];

ОДНАКО

Поскольку вам необходимо отслеживать, какие элементы содержат целые, а какие содержат символы - это не является привлекательным решением.

Другой вариант - просто иметь массив char и хранить цифры 0..9 в виде символов. Т.е., '0', '1', .. '9'.

(Третий вариант - просто иметь другую переменную, хранящую индекс для элемента 'X' - но это сильно отличается от того, что вы предлагаете)

0 голосов
/ 08 ноября 2011

Удар в темноте, потому что существует большая разница между моделью пользователя и моделью программирования.

Когда пользователь «вставляет» символ по указанному индексу, вы хотите обновить массивchar вместо вставки значения в ваш массив int.Поддерживайте 2 рядом друг с другом.

...