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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.94
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
#1

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

19.05.2009, 05:25. Просмотров 4238. Ответов 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;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2009, 05:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выделить в тексте лишние пробелы между словами (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
RazorQ
577 / 344 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
19.05.2009, 08:25 #2
Цитата Сообщение от uto Посмотреть сообщение
C++
1
ifstream f ("file.DAT", ios::in);
Открывать надо в двоичном режиме
C++
1
ifstream f ("file.DAT", ios::in | ios::binary);
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
19.05.2009, 10:06  [ТС] #3
RazorQ, а причем тут двоичный режим? В задание это не указано.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.05.2009, 10:26 #4
Код
    char buf [70];
туда поместится 69 символов, потому что строка - это понятие такое в C "набор символов, заканчивающийся нуль-символом" и в строке может быть ноль символов (то есть только нуль-символ) => strlen и покажет 0

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

выделять наверное с помощью какой-нибудь нестандартной функции из conio.h (там были функции для раскрашивания символов)
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
20.05.2009, 11:02  [ТС] #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
#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;
}
RIO
15 / 15 / 1
Регистрация: 13.05.2009
Сообщений: 331
20.05.2009, 22:22 #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Сделал без подсветки :

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;
}
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
21.05.2009, 04:02 #7
здесь выводятся позиции повторяющихся пробелов и их количество
Вложения
Тип файла: zip space_position.zip (443 байт, 43 просмотров)
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
22.05.2009, 19:25  [ТС] #8
А для чего это?
Что дадут мне позиции пробелов и их кол-ва?
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
23.05.2009, 07:16 #9
Код
- по нажатию произвольной клавиши поочередно выделяет в тексте лишние пробелы между словами;
- выводит текст на экран дисплея еще раз, убирая лишние пробелы между словами и начиная каждое предложение с новой строки.
ну, когда строки выводишь, в них узнаёшь позиции и, смотря как там раскрашиваешь (сразу или предварительно) раскрашиваешь с позиции на длину или выводишь с позиции на длину с другим цветом

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

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

Добавлено через 31 секунду
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
fseek()
Эээ, т.е. можно двумя способами чтоли?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2009, 09:45
Привет! Вот еще темы с ответами:

Убрать в текстовом файле ненужные пробелы, оставив между словами по одному, между предложениями по два. - C++
Мое задание: убрать в текстовом файле ненужные пробелы, оставив между словами по одному, между предложениями по два. Вот программа...

Пробелы между словами\предложениями - C++
Помогите с заданием: Дан произвольный текст. Отредактировать текст так, чтобы: а) между словами был ровно один пробел; б)...

В тексте удалить лишние пробелы и расположить слова в порядке возрастания длинн - C++
Помогите решить задачу. Спасибо ребят) В тексте удалить лишние пробелы и расположить слова в порядке возрастания их длин. С++

Отредактировать текст, удаляя лишние символы пробелов между словами - C++
Отредактировать текст,удаляя лишние символы пробелов между словами;по нажатию произвольной клавиши выделить первое предложение текста.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.05.2009, 09:45
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru