C Array: Как я могу сдвинуть каждый символ в строке? - PullRequest
0 голосов
/ 28 марта 2019

Я новичок в C и изучаю смену.

Я понимаю операцию сдвига, если данные представляют собой двоичное число, но для моего кода в этом случае я хочу реализовать случай, когда 't', 'h', 'i', 's', '', '\ 0' отбрасывается или сдвигается и перемещает 'a' к первому элементу этой строки.

Могу ли я сделать это с помощью оператора сдвига? Если так, то почему?

Действительно ценится.

char words[10] = {'t', 'h', 'i', 's', ' ', '\0', 'a', 'b', 'c'};

1 Ответ

1 голос
/ 28 марта 2019

Оператор сдвига, о котором вы говорите, в основном побитовый оператор .Вы не можете использовать это для перемещения массива символов.

Чтобы выполнить то, что вы просили, вы можете написать функцию.Предположим, вы хотите left shift -

int leftShift(char *words, int len)
{
    int i;
    for(i = 1; i < len; i++)
    {
        words[i - 1] = words[i];
    }
    len--;
    return len;
}

Что делает эта функция?- он принимает массив и длину этого массива в качестве параметра и выполняет сдвиг влево один раз.

Итак, из вашей основной функции вы можете просто вызывать этот метод любое количество раз, которое вам нужно -

int main(void) {

    char words[10] = {'t', 'h', 'i', 's', ' ', '\0', 'a', 'b', 'c'};
    int len = 10;

    len = leftShift(words, len); // left shift one time - this will discard 't'
    len = leftShift(words, len); // left shift one time - this will discard 'h'

   //finally print upto len, because len variable holds the new length after discarding two characters.
    int i;
    for(i = 0; i < len; i++)
    {
        printf("'%c', ", words[i]);
    }

    return 0;
}

Это очень тривиальная идея, конечно, этот подход можно улучшить многими способами.Но я думаю, у вас есть основная идея.

...