Из заданной строки символов изъять все буквенные символы, оставшиеся цифры преобразовать в число - C (СИ)
Формулировка задачи:
Нужно с заданного ряда символов, изъять все буквенные символы, а цифровые символы что остались превратить в число.
Решение задачи: «Из заданной строки символов изъять все буквенные символы, оставшиеся цифры преобразовать в число»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(){
setlocale(LC_ALL, "RUSSIAN");
char *str=(char*)malloc(0), letter;
int counter=0, i, j;
printf("Введите строку символов: ");
do{
letter=getchar();
counter++;
str=(char*)realloc(str, counter*sizeof(char));
if(letter!='\n'){
str[counter-1]=letter;
}else{
str[counter-1]='\0';
}
}while(letter!='\n');
i=0;
while(i<counter){
if(((str[i]>64) && (str[i]<91)) || ((str[i]>96) && (str[i]<123))){
for(j=i+1; j<counter; j++){
str[j-1]=str[j];
}
counter--;
str=(char*)realloc(str, counter*sizeof(char));
}else{
i++;
}
}
printf("%i", atoi(str));
free(str);
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с C
- Устанавливаем локаль на русский язык для корректного вывода символов
- Объявляем переменные: — str - указатель на строку символов, сначала указываем на память 0 байт — letter - символ, который считываем с помощью getchar() — counter - счетчик количества считанных символов — i, j - индексы для работы со строкой str
- Запрашиваем у пользователя ввод строки символов
- В цикле do-while считываем каждый символ, увеличивая счетчик и выделяя память под строку str
- Если считанный символ не является символом новой строки '\n', то добавляем его в строку str
- Если считанный символ является символом новой строки, то заменяем последний символ в строке str на символ окончания строки '\0'
- После окончания ввода строки символов выводим количество символов в строке
- В цикле while проходим по каждому симво в строке str
- Если символ является буквенным символом (в верхнем или нижнем регистре), то перемещаем все последующие символы в строке на одну позицию вперед
- Если символ не является буквенным символом, то увеличиваем индекс на 1
- После окончания цикла while выводим преобразованную строку в числовое значение с помощью функции atoi()
- Освобождаем память, выделенную под строку str
- Возвращаем 0, чтобы указать, что программа успешно завершилась