Как заменить символ "*"на точку?

Здравствуйте, столкнулся с проблемой, непонимаю как решается эта задача и что я сделал неверно. Помогите пожалуйста.

Условия задачи: Если в заданном тексте нет символа «*», то оставить его без изменения. В противном случае каждый
латинскую букву, которая находится перед первым символом "*", заменить на точку.

Код задачи :
#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main()
{
    char str[] = "soroto*11414*parapa*alfjjf*";
    char* smena = strchr(str, '*');
    if(smena)
        while(--smena >= str)
            if( isdigit(*smena) ) *smena = '.';
    puts(str);
    return 0;
}
  • Вопрос задан
  • 144 просмотра
Решения вопроса 2
Как вариант при помощи указателя с проверкой символа на латиницу(верхнем/нижнем регистре).

#include <stdio.h>
#include <string.h>

int main() {
	char str[] = "soroto*11414*parapa*alfjjF*";

	char *ptr = str;

	while(*ptr) {
		if(*ptr == '*') {
			if(*(ptr-1) >= 'a' && *(ptr-1) <= 'z' || *(ptr-1) >= 'A' && *(ptr-1) <= 'Z') {
				*(ptr-1) = '.';
			}
		}
		ptr++;
	}

	printf(str);

	return 0;
}
Ответ написан
@cython
У вас идёт проверка на то, что символ является числом, и только в этом случае он будет заменён на точку.
#include <stdio.h>
#include <string.h>
#include <ctype.h>


int main(int argc, char const* argv[]) {
	char str[] = "soroto*11414*parapa*alfjjf*";
	char* ptr = strchr(str, '*');
	if (ptr) {
		while (--ptr >= str) {
			if (!isdigit(*ptr)) {
				*ptr = '.';
			}
		}
	}
	puts(str);
	return 0;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
tyoma_koder
@tyoma_koder
используй эту регулярку
[a-zA-Z]+(?=\*)
Ответ написан
vabka
@vabka
Токсичный шарпист
что я сделал неверно.

Попробуй построчно разобрать свою программу, тогда поймёшь.

Спойлер

Ошибка на строчке, где ты делаешь
if(isdigit(*smena))
isdigit проверяет, что символ - это число.


PS: почему переменная называется smena?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы