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

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

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

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

С помощью текстового редактора создать файл, содержащий текст, длина которого не превышает 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2009, 05:25
Ответы с готовыми решениями:

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

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

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

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

16
591 / 357 / 16
Регистрация: 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);
0
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
19.05.2009, 10:06  [ТС] 3
RazorQ, а причем тут двоичный режим? В задание это не указано.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
19.05.2009, 10:26 4
Код
    char buf [70];
туда поместится 69 символов, потому что строка - это понятие такое в C "набор символов, заканчивающийся нуль-символом" и в строке может быть ноль символов (то есть только нуль-символ) => strlen и покажет 0

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

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

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

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

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

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

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

Добавлено через 23 часа 29 минут 6 секунд
Проблема решена. Тема закрыта
0
25.05.2009, 19:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.05.2009, 19:58
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru