С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/33: Рейтинг темы: голосов - 33, средняя оценка - 4.94
 Аватар для uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94

Выделить в тексте лишние пробелы между словами

19.05.2009, 05:25. Показов 6310. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ЕЩе одна задачка из Павловской... Прошу помощи!!! Если вам лень решать всю задачу, то меня очень интересует второй пункт... Но буду рад решению всей задачи

С помощью текстового редактора создать файл, содержащий текст, длина которого не превышает 500 символов (длина строки текста не должна превышать 70 символов).
Имя файла должно иметь расширение DAT.
Написать программу, которая:
- выводит текст на экран дисплея;
- по нажатию произвольной клавиши поочередно выделяет в тексте лишние пробелы между словами;
- выводит текст на экран дисплея еще раз, убирая лишние пробелы между словами и начиная каждое предложение с новой строки.

Добавлено через 8 минут 59 секунд
Первая часть есть, помогите с остальным =)

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.h>
#include <fstream.h>
#include <conio.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
        char buf [70];
    ifstream f ("file.DAT", ios::in);
    if (!f)  {
        cout << "Error of opening of a file.";  return 1;
    }
 
    while (!f.eof())  
    {
        f.getline(buf, 70);
 
        cout << buf << endl;
        }
        getch();
        return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.05.2009, 05:25
Ответы с готовыми решениями:

Строка: Удалить лишние пробелы между словами
Задание: нужно удалить лишние пробелы между словами (если один пробел, то его нужно оставить). # include &lt;conio.h&gt; # include...

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

Вывести на экран содержимое файла удалив лишние пробелы между словами
помогите дописать программу на visual c++ Дан текстовый файл, в котором слова разделены 1 и более пробелами. Вывести на экран содержимое...

16
 Аватар для RazorQ
591 / 357 / 16
Регистрация: 06.02.2009
Сообщений: 1,386
19.05.2009, 08:25
Цитата Сообщение от uto Посмотреть сообщение
C++
1
ifstream f ("file.DAT", ios::in);
Открывать надо в двоичном режиме
C++
1
ifstream f ("file.DAT", ios::in | ios::binary);
0
 Аватар для uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
19.05.2009, 10:06  [ТС]
RazorQ, а причем тут двоичный режим? В задание это не указано.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
19.05.2009, 10:26
Code
1
    char buf [70];
туда поместится 69 символов, потому что строка - это понятие такое в C "набор символов, заканчивающийся нуль-символом" и в строке может быть ноль символов (то есть только нуль-символ) => strlen и покажет 0

Цитата Сообщение от uto
лишние пробелы между словами
это можно решить через поиск двух пробелов в строке - функция strstr
Code
1
strstr(строка, "  ")
когда нашёл, можно применить
Code
1
strspn(позиция, " ")
это выдаст сколько там пробелов подряд

выделять наверное с помощью какой-нибудь нестандартной функции из conio.h (там были функции для раскрашивания символов)
0
 Аватар для uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
20.05.2009, 11:02  [ТС]
Блин, уже который час ломаю голову, как сделать так, чтобы выводилась строка, но при этом выделяла каждый лишний пробел...

Пока вот, что получилось...
Там все до кучи =)
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
#include <stdio.h>
#include <tchar.h>
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <windows.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
 
HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
 
        char buf [71]; char blank [2];
    ifstream f ("file.DAT", ios::in);
    if (!f)  {
        cout << "Error of opening of a file.";  return 1;
    }
 
    while (!f.eof())
    {
        f.getline(buf, 71);
                blank [2] = ' ';
                strstr(buf, blank);
        SetConsoleTextAttribute(hConsole, FOREGROUND_RED|BACKGROUND_RED|
BACKGROUND_GREEN|BACKGROUND_INTENSITY);  //background coloring demonstration
        cout << blank;
 
        SetConsoleTextAttribute(hConsole, FOREGROUND_RED|
FOREGROUND_GREEN|FOREGROUND_BLUE);
        cout << buf << endl;
        getch();
        }
        getch();
        return 0;
}
0
 Аватар для RIO
15 / 15 / 2
Регистрация: 13.05.2009
Сообщений: 331
20.05.2009, 22:22
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Сделал без подсветки :

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
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <string>
 
using namespace std;
 
int main(int argc, char* argv[])
{
    int I;
    string Result, R;
    ifstream F("File.DAT", ios::in);
    if (!F)
    {
       cout << "Error of opening of a file.";
       return 1;
    }
    while (!F.eof())
    {
          getline(F, R);
          Result += R;
    }
    R = "";
    cout<<Result;
    for (I = 0; I < Result.size(); I++)
    {
        if (Result[I] != ' ')
           R += Result[I];
        else
        {
           cout<<"\n";
           cout<<R;
           R = "";
        }
        if (I == Result.size() - 1)
        {
           cout<<"\n";
           cout<<R;
        }
    }
    getch();
    return 0;
}
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
21.05.2009, 04:02
здесь выводятся позиции повторяющихся пробелов и их количество
Вложения
Тип файла: zip space_position.zip (443 байт, 51 просмотров)
0
 Аватар для uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
22.05.2009, 19:25  [ТС]
А для чего это?
Что дадут мне позиции пробелов и их кол-ва?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
23.05.2009, 07:16
Code
1
2
- по нажатию произвольной клавиши поочередно выделяет в тексте лишние пробелы между словами;
- выводит текст на экран дисплея еще раз, убирая лишние пробелы между словами и начиная каждое предложение с новой строки.
ну, когда строки выводишь, в них узнаёшь позиции и, смотря как там раскрашиваешь (сразу или предварительно) раскрашиваешь с позиции на длину или выводишь с позиции на длину с другим цветом

потом точно так же, с этих позиции можно перезаписывать строки, удаляя пробелы кроме последнего и потом выводить
0
 Аватар для uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
23.05.2009, 08:24  [ТС]
Я вообще как понял реализацию...
Сначала мы ищем первые лишние пробелы, раскрашиваем. Потом вторые, раскрашиваем и т.д., а как конец файла, все выделенные пробелы удаляются. Но у меня как то не получается выделить их
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
23.05.2009, 08:58
Цитата Сообщение от uto
все выделенные пробелы удаляются
не, ты их не найдёшь
надо два раза текст читать и два раза его выводить, первый раз раскрашивать, потом делать нестандартный clrscr и второй раз, читая текст, определять где лишние пробелы (у тебя, конечно, проще выглядит, если читать посимвольно типа и пробелы лишние определять, но так ты ещё дольше будешь писать прогу), читать текст можно построчно и работать со строкой, пока она в памяти, через уже готовые функции поиска, правки и вывода, а потом уже выводить её на экран

Добавлено через 3 минуты 30 секунд
хотя, можно попробовать, выводя текст посимвольно на каждом втором пробеле проматывать до непробела и, если встретится конец файла, просто закончить, а если символ, то продолжить вывод (и так в цикле)
0
 Аватар для uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
23.05.2009, 09:26  [ТС]
А как считать текст дважды? Как я понимаю, надо переместить указатель вначало после первого прочтения. А как это делается?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
23.05.2009, 09:41
rewind(file); - описана в stdio.h
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
23.05.2009, 09:44
fseek()
0
 Аватар для uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
23.05.2009, 09:45  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
rewind(file)
Т.е. внутри надо писать название самого файла?

Добавлено через 31 секунду
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
fseek()
Эээ, т.е. можно двумя способами чтоли?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
23.05.2009, 12:06
Цитата Сообщение от uto
Т.е. внутри надо писать название самого файла?
не, указатель на файл, что обычно fgetc передаёшь, чтобы к файлу обращаться (это структура такая, там к ней подцеплен буфер, файловый дескриптор, полученный от системы, созданы флажки, ну типа закончился ли файл, есть ли ошибки чтения и так далее), то есть через неё обычно функции, работая с файлом, отмечают его состояние и вот этот указатель файла, тоже может быть указателем не в файле а в буфере
fseek тоже со структурой работает

C
1
fseek(file, 0L, SEEK_SET);
установит указатель файла file, на расстояние 0 байт от позиции SEEK_SET (это начало)
0
 Аватар для uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
25.05.2009, 19:58  [ТС]
Скажите, если у меня есть код удаления всех лишних пробелов, моя лаба на сколько % уже завершена?

Добавлено через 3 часа 43 минуты 43 секунды
Даже на такой вопрос никто ответить уже не может?

Добавлено через 23 часа 29 минут 6 секунд
Проблема решена. Тема закрыта
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.05.2009, 19:58
Помогаю со студенческими работами здесь

Удалить в строке лишние пробелы, оставив между словами ровно по одному
Дана строка состоящая из слов, между которыми есть некое количество пробелов. Требуется удалить лишние пробелы, оставив между словами...

Работа с файлами. Удалить все лишние пробелы, оставив между словами не более одного пробела
Дан текстовый файл. Удалить из него все лишние пробелы, оставив между словами не более одного пробела. Результат поместить в новый файл. ...

В каждой строке удалить лишние пробелы между словами и разместить их по левому краю, сохраняя первоначальную длину строк
Можете помочь?)Заранее спасибо

В каждой строке удалить лишние пробелы между словами и, сохраняя первоначальную длину строки, разместить текст по центру
В каждой строке удалить лишние пробелы между словами и, сохраняя первоначальную длину строки, разместить текст по центру строки.

В тексте убрать лишние пробелы и разделительные символы
1. Определить какие символы и сколько раз встречаются в тексте. Или 2. В тексте убрать лишние пробелы и разделительные символы,...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru