Удаление символа из строки - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задача такова: Даны символы s1,s2,... Известно, что символ s1 отличен от пробела и что среди s2,s3,... имеется хотя бы один пробел. Рассматриваются s1,...,sn - символы, предшествующие первому пробелу (n заранее неизвестно). Преобразовать последовательность s1,..., sn: в) удалив все символы, не являющиеся буквами или цифрами, и заменив каждую большую букву одноименной малой. Мой код:
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
 
void main() {
    unsigned short int n = 0;//количество символов
    char *str;//строка
    char ch;//текущий символ
    unsigned short int i, j;
    setlocale(LC_ALL, "RUS");
    puts("Введите строку посимвольно. Пробел - конец ввода.");
    str = (char*)malloc(sizeof(char));
    do {
        ch = getchar();
        if (ch != 32) {
            n++;
            str = (char*)realloc(str, n * sizeof(char));
            *(str + n - 1) = ch;
        }
    } while (ch != 32);
    str[n] = 0;
    puts(str);
    for (i = 0; i < n; i++) {
        if ((*(str + i) >= '0') && (*(str + i) <= '9') || (*(str + i) >= 'a') && (*(str + i) <= 'z'))
            continue; //если символ цифра или маленькая буква, перейти к следующему
        else if ((*(str + i) >= 'A') && (*(str + i) <= 'Z'))
            *(str + i) = *(str + i) + 32; //если большая буква, заменить маленькой
        else { //иначе символ не является ни цифрой, ни буквой и подлежит удалению
            for (j = i; j < n; j++) { //перемещаем все на 1 символ влево
                *(str + j) = *(str + j + 1);
            }
            n--; //длина строки уменьшается на 1
        }
    }
    str = (char*)realloc(str, n * sizeof(char));//уменьшаем размер строки
    str[n] = 0;
    puts(str);
    system("pause");
}
Все бы ничего. И программа исправно заменяла все большие буквы маленькими, пока я не добавила удаление символов(28-36 строка). После чего программа не только не удаляет символы, но даже перестала заменять буквы. Погуглив, я не нашла другого способа удалить символ из строки, кроме как перезаписать все заново, что я и сделала.

Решение задачи: «Удаление символа из строки»

textual
Листинг программы
if (*s>='0' && *s<='9' || *s>='a' && *s<='z' || *s='\n')

Объяснение кода листинга программы

  1. Проверяется условие: символ в строке s должен быть больше или равен '0' и меньше или равен '9', или символ должен быть больше или равен 'a' и меньше или равен 'z', или символ должен быть равен символу новой строки '\n'.
  2. Если условие выполняется, то происходит удаление символа из строки s.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы