Форум программистов, компьютерный форум CyberForum.ru

Убрать из текста нули - C++

Восстановить пароль Регистрация
 
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
26.04.2013, 02:59     Убрать из текста нули #1
Доброе утро, прошу помощи с работой над текстом.
Дан текстовый файл, в котором нужно из всех чисел убрать начальные нули кроме последнего если за ним стоит точка.
Проверку необходимости убрать 0 делаю так: Если в тексте нашел 0, то смотрю что стоит перед ним, если перед ним не цифра и не точка, то смотрю что после него, если это не точка, то заменяю 0 на пробел. На выходе получаю просто 0 вместо отредактированного текста. Где косяк?
C++
1
2
3
4
5
6
for(k=0;k<i;k++)
        for (j=0;j<80;j++)
            if (str[k][j]=='0')
                if ((str[k][j-1]!='0')&&(str[k][j-1]!='1')&&(str[k][j-1]!='2')&&(str[k][j-1]!='3')&&(str[k][j-1]!='4')&&
                    (str[k][j-1]!='5')&&(str[k][j-1]!='6')&&(str[k][j-1]!='7')&&(str[k][j-1]!='8')&&(str[k][j-1]!='9')&&(str[k][j-1]!='.'))
                    if (str[k][j+1]!='.') str[k][j]=' ';
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2013, 02:59     Убрать из текста нули
Посмотрите здесь:

C++ Выкинуть нули
C++ Найти, на сколько нулей оканчивается число N
C++ как убрать нули с вещественого числа
Нули после числа C++
C++ Отбросить нули
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
26.04.2013, 07:43     Убрать из текста нули #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <conio.h>
 
int main(int argc, char* argv[])
{
    FILE* fp = NULL; char filename[] = "d:\\input.txt";
    if ((fp = fopen(filename, "r")) == NULL)
    {
        printf("Unable to open file for reading %s\n",filename);
        return 1;
    }
 
    fseek (fp , 0 , SEEK_END);
    int _size = ftell (fp); rewind (fp);
 
    int t = 0;
    char *str = new char[_size], ch = '\0';
    while ((ch = fgetc(fp)) != EOF) str[t++] = ch;
 
    str[t] = '\0';
 
    fclose(fp);
 
    for (int i = 0; str[i] != '\0'; i++)
        if (str[i] == '0' && str[i+1] != '.')
            for (int n = i; str[n] != '\0'; n++)
                str[n] = str[n+1];
 
    if ((fp = fopen(filename, "w")) == NULL)
    {
        printf("Unable to open file for writing %s\n",filename);
        return 1;
    }
 
    fprintf(fp,"%s\n",str);
    fclose(fp);
 
 
    return 0;
}
input.txt:
this is a go0d c++ c0de sampl0.
output:
this is a god c++ cde sampl0.
Мишутка1
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 47
26.04.2013, 08:30     Убрать из текста нули #3
Я бы считывал(всё кроме 0) и записывал бы в другой файл. Или считал бы в массив, исключил бы нули обычным условием и записал снова.
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
26.04.2013, 12:32     Убрать из текста нули #4
Цитата Сообщение от zitxbit Посмотреть сообщение
input.txt:
this is a go0d c++ c0de sampl0.
output:
this is a god c++ cde sampl0.
Мне что-то кажется, что тут все нули были начальные...
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
26.04.2013, 19:05  [ТС]     Убрать из текста нули #5
Цитата Сообщение от zitxbit Посмотреть сообщение
input.txt:
this is a go0d c++ c0de sampl0.
output:
this is a god c++ cde sampl0.
Извините, но речь не об этих нулях. программа должна переводить строку:
Str with numbers 1750 00.25 02500
в строку:
Str with numbers 1750 0.25 2500

По ходу отладки выяснилось что моя логика верна и предложенный в самом начале алгоритм правильно работает и убирает только нужные нули, проблема с выводом появлялась из-за ошибки в последующем коде. Всем спасибо, программа отлажена. Первоначальный алгоритм правильный.
Yandex
Объявления
26.04.2013, 19:05     Убрать из текста нули
Ответ Создать тему
Опции темы

Текущее время: 05:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru