jatinp510 Ответов: 4

В чем разница между char[1000] и int[1000]


Интеллектуальная девушка | введение в динамическое программирование 1 & алгоритмы практические задачи | HackerEarth[^]


это вопрос от hackerearth. я успешно подчинился. но у меня есть некоторые сомнения.

Что я уже пробовал:

#include <stdio.h>
int main()
{

    int i,count,j,l;
    char arr[10000];
    scanf("%s",arr);
    
    for(i=0;i<strlen(arr);i++)
    {
            count=0;
    for(j=i;j<strlen(arr);j++)
    {

        if(arr[j]%2==0)
        {

            count++;
        }
    }
        printf("%d ",count);


    }
    return 0;
}

if i will write int arr[10000] instead of char[10000]. it is not working plzz explain me this.

4 Ответов

Рейтинг:
29

OriginalGriff

char и int бывают разные размеры, и система это прекрасно понимает. char переменные занимают один байт, в то время как int значения занимают 4 в эти дни - предполагая 32-битное целое число, что является нормальным в эти дни.
Когда вы объявляете arr как массив char и используете scanf чтобы прочитать в него строку, он считывает ее нормально, и ваши индексы массива извлекают символ из каждого байта - поскольку индекс увеличивается на единицу каждый раз, то же самое происходит и с адресом памяти, из которого извлекается каждый из них.

----- arr points here
|
v
abcdefghijklm
^^^
|||
||--- arr[2]
||
|---- arr[1]
|
----- arr[0]
Когда вы объявляете его как int массив, то scanf делает точно то же самое, но индексы увеличивают адрес памяти на размер целого числа - 4 байта, а не один:
----------- arr points here
|
v
abcdefghijklm
^   ^   ^
|   |   |
|   |   --- arr[2]
|   |
|   ------- arr[1]
|
----------- arr[0]


jatinp510

понял... Спасибо..

OriginalGriff

Всегда пожалуйста!

Рейтинг:
21

Afzaal Ahmad Zeeshan

Существует несоответствие типов данных, хотя в основном это не мешает вам запускать программу, только это даст вам неправильные результаты.

Но вам нужно понять основное различие между типами int и char, особенно в контексте C. В языках высокого уровня они иногда имеют одинаковый размер для данных. В C они имеют разные (очень разные) размеры, char-всего 1 байт, а int-4 байта (на 32 битах и разные на других). C типы данных - Википедия[^]

Позже вы попытаетесь сделать %d, который ожидает десятичную дробь. И то же самое относится и к %s, который ожидает тип char. Таким образом, вы печатаете в одном формате, а принимаете в другом, на что C никогда не будет жаловаться — только вы будете. Тебе тоже нужно измениться %d и работайте во всех персонажах, или измените это %s работать только с целыми числами. Кроме того, после внесения этого изменения вы можете выбрать тип массива, с которым хотите работать.

Вы можете прочитать здесь, строка формата scanf - Википедия[^]


jatinp510

можете ли вы дать мне soln этого вопроса с типом int.
И спасибо :)

Afzaal Ahmad Zeeshan

Я уже дал вам решение, вам просто нужно решить, что вы хотите попробовать. :-)

Рейтинг:
2

Patrice T

Не ваш вопрос, но вашу программу можно сделать быстрее.
- Нечетное/четное
Использование модуля, чтобы узнать, является ли число нечетным или четным, более или менее делает деление, это стоит дорого.
Поскольку наименее значимый бит является ответом, вы можете получить ответ с помощью простого bitwise and
- избавьтесь от вложенных циклов
Когда вы сравниваете 2 последовательных результата, они отличаются только нечетным/четным результатом первого элемента в последовательности.
Таким образом, как только вы знаете результат полной последовательности, второй результат зависит только от нечетного/четного состояния первого элемента, вам не нужно пересчитывать всю последовательность.


Рейтинг:
19

CPallini

Разница: 30000 байт памяти.


В C язык программирования, а char является 1-байтовым целым числом, в то время как int больше (обычно 4 байта).
Строки есть такие chars (т. е. функции, обрабатывающие строки, например scanf с %s спецификатор формата и strlen не ждите массив символов в качестве аргументов).
Вы получите предупреждения компилятора (и неправильное поведение), если используете массив int в вашей программе.


jatinp510

спасибо тебе..

CPallini

Добро пожаловать.