Удаление символа из строки - 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.