Удаление символа из строки - C (СИ)
Формулировка задачи:
Задача такова: Даны символы s1,s2,... Известно, что символ s1 отличен от пробела и что среди s2,s3,... имеется хотя бы один пробел. Рассматриваются s1,...,sn - символы, предшествующие первому пробелу (n заранее неизвестно). Преобразовать последовательность s1,..., sn:
в) удалив все символы, не являющиеся буквами или цифрами, и заменив каждую большую букву одноименной малой.
Мой код:
Все бы ничего. И программа исправно заменяла все большие буквы маленькими, пока я не добавила удаление символов(28-36 строка). После чего программа не только не удаляет символы, но даже перестала заменять буквы.
Погуглив, я не нашла другого способа удалить символ из строки, кроме как перезаписать все заново, что я и сделала.
#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"); }
Решение задачи: «Удаление символа из строки»
textual
Листинг программы
if (*s>='0' && *s<='9' || *s>='a' && *s<='z' || *s='\n')
Объяснение кода листинга программы
- Проверяется условие: символ в строке
s
должен быть больше или равен '0' и меньше или равен '9', или символ должен быть больше или равен 'a' и меньше или равен 'z', или символ должен быть равен символу новой строки '\n'. - Если условие выполняется, то происходит удаление символа из строки
s
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д