@pipka6666

Как сделать в строке замену нескольких конкретных одинаковых символов на один такой?

Добрый день, возник вопрос. Имею код(указал ниже) который число введеное в строку конвертирует в число с плавающей точкой убирая всякие ненужные символы(буквы например) и заменяет запятую на точку чтобы число коректно отображалось. Но я не знаю что делать в случаях если введут например две или больше запятые/точки подряд, потому что тогда конвертируется лишь та часть что будет до запятой. Пример:

66e97df97386e937257027.png

Подскажите, как можно сделать замену больше одного символа '.' на один, т.е если я введу >1 точки подряд, то они все заменятся одной точкой?

#include <stdio.h>
#include < stdlib.h >

int main() {
    char str[12];
    double number = 0;
    printf("Enter a number to edit: ");
    gets(str);
    int i = 0;
    printf("Entered number :      %s\n", str);
    while (str[i] != '\0'){
        if (str[i] == ',') {

            str[i] ='.';

        }
            
        ++i;
    }
    printf("Edited number but not converted:      %s\n", str);
    
    number = atof(str);
    printf("Edited number %f\n ", number);
    return 0;
}
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Это еще ничего, а как вы хотите, чтобы парсилась строка "1111,2222,3333"? Как 11112222.3333? Или 111.22223333? Или что?

Правильный ответ: если строка не является корректно записанным числом, то надо выдавать ошибку, а не пытаться незаметно для пользователя исправить за него ошибки.

Например, можно просто читать сразу число. Если вам надо, чтобы число было корректным и при использовании '.' и ',', то можно просто все запятые поменять на точку.
Ответ написан
grantur5707
@grantur5707
Full Stack Web Developer
Если я правильно понял задачу, то тебе нужно заменить несколько подряд идущих запятых или точек на одну точку в строке.

Набросал примерную логику, получилось как-то так:

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[12];
    double number = 0;
    printf("Enter a number to edit: ");
    gets(str);
    int i = 0, j = 0;
    char editedStr[12];
    int dot_found = 0;

    printf("Entered number :      %s\n", str);

    while (str[i] != '\0') {
        if (str[i] == ',' || str[i] == '.') {
            if (!dot_found) {
                editedStr[j++] = '.';
                dot_found = 1;
            }
        } else {
            editedStr[j++] = str[i];
            dot_found = 0;
        }
        ++i;
    }
    editedStr[j] = '\0';

    printf("Edited number but not converted:      %s\n", editedStr);

    number = atof(editedStr);
    printf("Edited number: %f\n", number);

    return 0;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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