Посимвольно считать с клавиатуры символы и заменить их по определенному паттерну в C
Нужно посимвольно обработать строку, которую вводит пользователь с клавиатуры и по определенному паттерну изменить её, после этого вывести ее в консоль. Не получается проверить условие, что в текущем символе только буквы, как закончить или улучшить код?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int checkString(const char s[]) {
unsigned char c;
while ( (c = *s) && (isalpha(c) || isblank(c))) ++s;
return *s == '\0';
}
void replacechar(char *s, char c1, char c2) {
int i = 0;
for(i = 0; s[i]; i++) {
if(s[i] == c1) {
s[i] = c2;
}
}
}
void main() {
int a;
unsigned count = 0;
printf("Enter your number: ");
while ((a = getchar()) != '~') {
// If that was in first time - first symbol is dot
if ((char) a == '.' && count == 0) printf("0.");
// If second symbol is letter than stop
if (isalpha((char) a) == 1) printf("%c", (char) a);
}
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Я бы делал как-то так, чтобы отвечать всем требованиям (и ввода, и вывода, и посимвольного ввода):
int main()
{
for(;;)
{
char buf[256] = { 0 }, *o = buf;
printf("Введите число: ");
int c = getchar();
if (c == '\n') break; // Пустая строка - выход
if (c == '.' || c == ',') // Точка первая или нет?
*o++ = '0';
ungetc(c,stdin);
int dot = 0;
for(;;)
{
c = getchar();
if (isdigit(c)) { *o++ = c; continue; } // Цифра
if (!dot && (c == '.' || c == ',')) // Точка,
{ // которой еще не было
*o++ = '.';
dot = 1;
} else break;
}
while(c != '\n') c = getchar();
printf("Вы ввели: %s", buf);
if (!dot && o != buf) printf(".00"); // Если точки не было,
puts(""); // а число было
}
}
Окончание работы — при вводе пустой строки.