Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 22.12.2016
Сообщений: 14

Проверить правильность написания чисел в тексте; встретившиеся в начале числа незначащие нули опустить

15.05.2017, 13:46. Показов 1647. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, возникла такая проблема
Цитирую задание : "Проверить правильность написания чисел в тексте. Встретившиеся
в начале числа незначащие нули опустить. Исправленный текст напечатать."

Пришёл к выводу, что сойдёт и превратить ряд аля "00005" в "5"

Написал, и вроде бы оно работает

Кликните здесь для просмотра всего текста
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 "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
using namespace std;
int main()
{ 
    /* подключаем всё это добро */
    ifstream f1("D:/1.txt"); 
    char c[100];
    ofstream f2("D:/2.txt");
    f1.getline(c, 100);
    int m = strlen(c);
        int position = -1;
        /* обсчитываем */
    for (int i = 0; i < m; i++)
    {
        if (c[i] >= '1' && c[i] <= '9')
        {
            position = i;
        }
        if ( (c[i] == ' ' || c[i] == '.' || c[i] == ',' || c[i] == '!') && position != -1)
            position = -1;
        if (position == -1 && c[i] == '0')
        {
            if (c[i] == '0')
                c[i] = ' ';
        }
    }
    /* выводим */
    cout << c;
    f2 << c;
    f1.close();
    f2.close();
    _getch();
    return 0;
}


Проблема в том, что работает только для одной строки (нижние не обсчитывает)
И, вроде бы, на словах всё просто
А вот на деле как-то не работает.

Как записать так, чтобы она по всем строкам пробегалась?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.05.2017, 13:46
Ответы с готовыми решениями:

Проверить правильность написания чисел в тексте
Проверить правильность написания чисел в тексте. Встретившиеся в начале числе незначащие нули опустить. Исправленный текст напечатать.

Проверить правильность написания чисел в тексте
Люди добрые, помогите пожалуйста, как написать программу?Просто я новичек!( Проверить правильность написания чисел в...

Проверить правильность написания в тексте сочетаний ЖИ и ШИ
Проверить правильность написания в тексте сочетаний ЖИ и ШИ. В случае ошибки выдать сообщение на экран.

12
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
15.05.2017, 17:47
Вместо этого участка кода
C++
1
2
3
4
    ifstream f1("D:/1.txt"); 
    char c[100];
    ofstream f2("D:/2.txt");
    f1.getline(c, 100);
Напишыте
C++
1
2
3
4
5
6
7
8
9
    ifstream f1("D:/1.txt");
    
    f1.seekg (0, ios::end);
    int size = f1.tellg ();
    f1.seekg (0, ios::beg);
    
    char c[size+1];
    ofstream f2("D:/2.txt");
    f1.read (c, size);
0
1 / 1 / 0
Регистрация: 22.12.2016
Сообщений: 14
15.05.2017, 18:56  [ТС]
А можно пояснить? В первый раз подобную конструкцию вижу, если честно
+ в чаре [size+1] отказывается пахать (мб я просто чего-то не понял, но код E0028 требует, чтобы оно имело константное значение, что я пока не могу понять)
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
15.05.2017, 18:58
Не будет такое в VS работать. Массив через new создавай.
0
1 / 1 / 0
Регистрация: 22.12.2016
Сообщений: 14
15.05.2017, 19:15  [ТС]
nmcf, а для чего именно здесь массив? Под мою C что ли?
Немного не до понял..
0
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
15.05.2017, 19:20
C++
1
char *c = new char [size+1];
И в конце
C++
1
delete [] c;
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
15.05.2017, 19:35
Цитата Сообщение от UQuark Посмотреть сообщение
для чего именно здесь массив?
Ну файл в него считывается. Странный вопрос.
0
1 / 1 / 0
Регистрация: 22.12.2016
Сообщений: 14
16.05.2017, 17:25  [ТС]
Ааа, всё, дошло.
P.s. а можно как-то подобное было сделать, ну, например, с fopen'ами? Или с моей дефолтной конструкцией?
Просто у меня по дефолту бралась одна строка, ну и я пытался с помощью while запихать туда гетлайн.
Ну или через fgets по fopen'ам, но тоже не работало (хотя, мне что-то подсказывает, что это просто я что-то упускал из виду)

Добавлено через 21 час 20 минут
В общем, по советам decrement'а и nmcf'а что-то сделал вчера ночью.
Кликните здесь для просмотра всего текста
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
#include <cstring>
using namespace std;
int main()
{
    /* подключаем всё это добро */
    ifstream f1("D:/1.txt");
 
    f1.seekg(0, ios::end);
    int size = 0;
    size = f1.tellg();
    f1.seekg(0, ios::beg);
    char *c = new char[size + 1];
    //for (int i = 0; i < (size + 1); i++) { c[i] = 0; }
    
    ofstream f2("D:/2.txt");
    
    f1.read(c, size);
    
    int m = strlen(c);
    int position = -1;
    /* обсчитываем */
    for (int i = 0; i < m; i++)
    {
 
        if (c[i] >= '1' && c[i] <= '9')
        {
            position = i;
        }
        if ((c[i] == ' ' || c[i] == '.' || c[i] == ',' || c[i] == '!') && position != -1)
            position = -1;
        if (position == -1 && c[i] == '0')
        {
            if (c[i] == '0')
                c[i] = ' ';
        }
 
    }
    /* выводим */
 
    cout << c;
    f2 << c;
 
    f1.close();
    f2.close();
    delete[] c;
    _getch();
    return 0;
}

Тыркнул тестовый пример (где хоть и были несколько строк, но всё равно обсчитывалась только верхняя +, когда стал проверять днём, ещё третья строка.
Изначально файл, откуда это читается, был таким :
Кликните здесь для просмотра всего текста

008ee 00eeee aaaa 0350
007
00aaaa00 0001
000888
0000999
help 707 massive

В итоге, изменяются только 1я и часть 3ей строки
превращаясь в это :
Кликните здесь для просмотра всего текста

8ee eeee aaaa 350
007
00aaaa00 1
000888
0000999
help 707 massive
0
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
16.05.2017, 18:13
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
#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
using namespace std;
int main ()
{ 
    ifstream f1 ("D:/1.txt");
    
    f1.seekg (0, ios::end);
    int size = f1.tellg ();
    f1.seekg (0, ios::beg);
    
    char *c = new char [size+1];
    f1.read (c, size);
    
    for (int i = 0; i < strlen (c); i++)
         if (c [i] == '0' || !isdigit (c [i]) & ~(c [i] == '\n'))
              c [i] = ' ';
    cout << c;
    
    ofstream f2("D:/2.txt");
    f2 << c;
    
    f1.close ();
    f2.close ();
    delete [] c;
    _getch ();
    return 0;
}
0
1 / 1 / 0
Регистрация: 22.12.2016
Сообщений: 14
16.05.2017, 18:26  [ТС]
А чар нужно обнулять?
Ибо просто при запуске оно ругается на
Expression: c>=-1 && c<=255
(Ну я так понял, что это основная ошибка)

<вырезано>
 Комментарий модератора 
Картинки загружайте на форум
0
1 / 1 / 0
Регистрация: 22.12.2016
Сообщений: 14
16.05.2017, 18:33  [ТС]
Лучше, наверное, я с картинкой спрошу, ибо так может не понятно быть.
Прошу прощения за второй пост, сразу не успел отредачить.
Кликните здесь для просмотра всего текста
0
1 / 1 / 0
Регистрация: 22.12.2016
Сообщений: 14
20.05.2017, 13:21  [ТС]
P.s. Нашёл ещё один вариант. Здесь же. Может кто-нибудь пояснить, почему при запуске консольки выдает "expression : string subscript out of range?"
Кликните здесь для просмотра всего текста
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
#include <iostream> 
#include <fstream> 
#include <string> 
#include <conio.h> 
using namespace std; 
int main() 
{
ifstream file("D:/badfile.txt"); 
string s, s1; 
ofstream out("D:/goodfile.txt"); // 
getline(file, s); // 
for (int i = 0; i < s.length(); i++) // 
{
if (s[i] >= '1' && s[i] <= '9') // 
s1 += s[i]; // 
if (s[i] == '0' && s[i - 1] >= '1' && s[i - 1] <= '9') // 
s1 += s[i]; //
} // 
cout << s1;  // 
out << s1; //
file.close();// 
out.close(); // 
_getch(); // 
return 0;
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
20.05.2017, 14:17
Потому что (i - 1) приведёт к выходу за границу строки при i = 0.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.05.2017, 14:17
Помогаю со студенческими работами здесь

Удалить незначащие нули числа
В общем есть label, в нем двоичное число. Нужно вывести в текстбокс это число без &quot;незначащих&quot; нулей. Например в label:...

Как убрать незначащие нули из вещественного числа?
Помогите пожалуйста! Есть число double value == 12 650 320. 250 000 Как убрать 0 после дисятичной точки. Заранее благодарен.

Вывод числа в обратном порядке, учитывая незначащие нули
Я написал программу для вывода числа в обратном порядке, но она не учитывает незначащие нули. Допустим, при вводе: 001 выводится 1, а...

Считая непустое слово P записью двоичного числа, удалить из него незначащие нули, если такие есть
A={0,1}. Считая непустое слово P записью двоичного числа, удалить из него незначащие нули, если такие есть. Помогите пожалуйста...

Проверить правильность написания предикатов
Проверьте пожалуйста ,правильно ли я записала выражения на языке предикатов, а то сомневаюсь я. Писать формулы здесь не умею, поэтому...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru