yagami_md Ответов: 2

Как вставить значение между таблицей[0] и таблицей [1]?


Привет друзья
Я хочу отредактировать свою программу на языке Си для вставки нового значения в первую таблицу , это моя оригинальная программа и комментарий, который я пробовал !
Моя программа будет именно такой :
Moins val = 0
Плюс val = 1
-----------
Moins 0 = val
Плюс 0 = 2
----------
Моины 1 = 2
Плюс 1 = 3
.
.
.
Мужнієкса 255 = 256
Плюс 255 = 257
Это означает новую вставку char val между интервалами 0 и 1
Символ нуля между диапазонами 1 и 2
Символ 1 между диапазонами 2 и 3
Символ между 2 ряд 3 и 4

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

#define plus(c)       (c+1)
#define moins(c)      (c)

Int main ()
{
    Int arrayCount[256];//number of ascii code
    Int range[plus(256)];//table of all ascii counted
    Int c;
    For (c=0;c<256;c++)
    {
        ArrayCount[c]=0;
    }
    While (c=fgetc(file))//file is opened with image grey scale
    {
        ArrayCount[c]++;
    }

    Moy[0]=0;
//  Moy[1]=tab[257];
    For(c=0;c<=257;c++)
    {
        Range[plus(c)]=tab[c];
    }
    For(c=1;c<=257;c++)
    {
        Range[c]=range[c]+range[c-1];

Rick York

Я думаю, что вы пропустили там часть своего кода.

Здесь есть много проблем. У вас есть массивы размером 256, и вы получаете доступ к элементу 257 в нем. В языке Си индексы этих массивов будут варьироваться от 0 до 255, или на единицу меньше их емкости, так как они начинаются с нуля. Я всегда превращаю такое "волшебное" значение в значение const в C++ или определение C. Вот такой пример :

#define ArraySize 256

int range[ArraySize];
// использование его в цикле :
for( c = 0; c < ArraySize; ++c )
{
диапазон[c] = 0;
}

yagami_md

Ваше решение-это только то, что я сделал для подсчета всех символов в файле, но в таблице headcOunt[]
Моя проблема заключается в том, как я вставляю новый символ(char) перед символом 0 и пытаюсь вставить символ в таблицу range [], а диапазон символа будет находиться между диапазоном[0] и диапазоном[1]
Это означает, что диапазон[плюс(val)]=1
Диапазон [moins(val)]=0

Richard MacCutchan

Это, конечно, странно выглядящий код C: зарезервированные (и другие) слова, начинающиеся с заглавных букв.

yagami_md

Как я могу это сделать??

Richard MacCutchan

Я не уверен, что правильно понял вопрос. Я, конечно, не понимаю код.

Iqra Ali

Чтобы добавить что-то между 0 и 1, вам нужно сделать это что-то а "1" и тогда 1 будет 2. Можете ли вы поделиться тем, что не работает?

2 Ответов

Рейтинг:
8

Rick York

Вот один из способов переместить массив вниз и вставить новое значение :

#define ArraySize 256
int range[ArraySize];
memmove( &range[2], &range[1], sizeof(int)*( ArraySize-2 ) );
range[1] = newValue;


Рейтинг:
19

KarstenK

В C вы должны выделить новый и достаточно большой массив и скопировать все необходимые значения. Ницца Учебник по Youtube.

В C++ вы можете использовать a вектор или некоторые другие классы, которые поддерживают изменяемые массивы.