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

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

Войти
Регистрация
Восстановить пароль
 
 
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
#1

Работа с текстовыми файлами - C++

24.11.2013, 22:35. Просмотров 824. Ответов 19
Метки нет (Все метки)

Люди добрые кто может подскажите))
Задание: Дан текстовый файл, проставить пробелы после знаков препинания ",.?!" если он отсутствует, поставить пробел перед ( и после ) если он отсутствует. Есть небольшие наработки, застрял на том: что не знаю как в текстовом файле заменить слово (могу записать в конец или на место курсора, но вот как заменить слово разобраться не могу)...
Пример:
Дано:Вася Петя,номер завтра(поможем) когда.вот
Получим: Вася Петя, номер завтра (поможем) когда. Вот
Помогите пожалуйста очень срочно нужно. Вот пока то что накидал:
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
 #include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <string.h>
#include <Windows.h>
#include <iomanip>
 
using namespace std;
 
 
int main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    fstream text;
    int p;
    string str1;
    char *str2;
    text.open("text.txt");
    if (text)
    {
        while (!text.eof())
        {
            text >>str1;
            p = int(strpbrk(str1.c_str(),",.!?"));
            if ((strpbrk(str1.c_str(),",.!?")!=NULL)&&(str1[int(strpbrk(str1.c_str(),",.!?"))+1]!=char(" ")))
            {
                str2 = new char [int(strpbrk(str1.c_str(),",.!?"))];  
                strncpy(str2,str1.c_str(),int(strpbrk(str1.c_str(),",.!?")));
                text << str2;
            }
        }
    }
    system("pause");
    return 0;
}
Среда Visual Studio 2010(если это имеет значение)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2013, 22:35     Работа с текстовыми файлами
Посмотрите здесь:

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

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

Работа с текстовыми файлами - C++
Добрый вечер. Дан текстовый файл. Найти количество строк, которые начинаются с данной буквы.

Работа с текстовыми файлами в С++ - C++
Здравствуйте. На лето задали написать прогу в среде visual studio c++, но этот предмет у меня закончился зимой и я конечно уже забыл...

Работа с текстовыми файлами - C++
Пожалуйста, помогите с задачей: Дан файл f, компоненты которого являются действительными числами. Найти: 1.наибольшее из значений...

Работа с текстовыми файлами - C++
Здравствуйте, уважаемые !!! Появились проблемы во время решения задачи. Никак не могу решить проблему. Задача такова: Существует...

Работа с текстовыми файлами си++ - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;string.h&gt; #include &lt;math.h&gt; #include &lt;fstream&gt; #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2013, 23:19     Работа с текстовыми файлами #2
Слова в файл проблематично вставлять. Поэтому лучше считать файл, обработать, переписать файл.
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
24.11.2013, 23:24  [ТС]     Работа с текстовыми файлами #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Слова в файл проблематично вставлять. Поэтому лучше считать файл, обработать, переписать файл.
Спасибо! Так и думал,уже работаю над этим)...
А не подскажете какой тип данных можно использовать чтобы записать не известное количество слов. Я просто делал так: Читал весь файл, считал сколько слов, выделял динамический массив. (но по моему это как то не очень) можно ли записать все слова не зная сколько их во что нибудь типа массива?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2013, 23:28     Работа с текстовыми файлами #4
vector <string>.
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
24.11.2013, 23:42  [ТС]     Работа с текстовыми файлами #5
Благодарю) Блин вот в Универе препод сама ничерта не знает и помоч не может, а требует чтобы решили)(+ приходится разбираться и узнаешь больше)Еще раз спасибо, буду реализовывать...

Добавлено через 10 минут
А не могли бы еще подсказать пожалуйста)
C++
1
int(strpbrk(str1.c_str(),",.!?"))
вот функция возвращает указатель на первое вхождение символа .,! итд, правильно ли я делаю чтобы узнать номер этого символа? или есть ли какая нибудь функция для этого?(много перелопатил уже, все функции возвращают указатель)
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.11.2013, 00:03     Работа с текстовыми файлами #6
В классе string есть свои методы, в том числе и поиска (find()). Лучше их используйте, раз читаете в string.

Добавлено через 15 минут
Я бы тут проще всё сдела. Просто посимвольно читать, например, в string, и обрабатывать. Для просмотра следующего символа в файле использовать peek(). Считали знак пунктуации, посмотрели следующий символ, если не пробел, то добавили в строку пробел. Считали скобку, посмотрели, что в строке перед этим было считано, если не пробел - добавили пробел. Как-то так...
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
25.11.2013, 00:33  [ТС]     Работа с текстовыми файлами #7
Цитата Сообщение от alsav22 Посмотреть сообщение
В классе string есть свои методы, в том числе и поиска (find()). Лучше их используйте, раз читаете в string.

Добавлено через 15 минут
Я бы тут проще всё сдела. Просто посимвольно читать, например, в string, и обрабатывать. Для просмотра следующего символа в файле использовать peek(). Считали знак пунктуации, посмотрели следующий символ, если не пробел, то добавили в строку пробел. Считали скобку, посмотрели, что в строке перед этим было считано, если не пробел - добавили пробел. Как-то так...
Попробую) Спасибо большое!!!

Добавлено через 25 минут
Все разобрался с peek()... Спасибо что натолкнули на хорошую идею, что то сам не додумался посимвольно читать файл, так намного проще)
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.11.2013, 00:55     Работа с текстовыми файлами #8
Обработка заданных знаков пунктуации, как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
char ch;
 string str;
 while (true)
 {
     fin >> ch;
     if (fin.eof()) break;
     if ((ch == '.' || ch == ',' || ch == '!' || ch == '?') && fin.peek() != ' ')
     {
         str.push_back(ch);
         str.push_back(' ');
     }
     else str.push_back(ch);
 }
Добавлено через 58 секунд
Со скобками немного по-другому, сами додумаете.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.11.2013, 16:12     Работа с текстовыми файлами #9
Цитата Сообщение от Alex_Skripa
вы ошибаетесь) или у меня компилятор ошибается) но для переменных типа char =' '; а для string=" ";
Два компилятора:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
 
int main()
{
     string str = "";
     str += 'a';
 
     cout << str << endl;
 
     system("pause");
     return 0;
}
Миниатюры
Работа с текстовыми файлами   Работа с текстовыми файлами   Работа с текстовыми файлами  

Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
25.11.2013, 16:28  [ТС]     Работа с текстовыми файлами #10
Ну мне же врать зачем?) У меня работает все, а вот если пытаюсь string-у присвоить ' '; ошибку дает, если подскажите как тут скрин кидать я скину) А так еще раз благодарю за идею, ну и ваш пост по переводу русских символов в верхний регистр тоже очень помог.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.11.2013, 18:40     Работа с текстовыми файлами #11
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
Ну мне же врать зачем?) У меня работает все, а вот если пытаюсь string-у присвоить ' ';
А мне зачем? Специально скрины сделал, для подтверждения. Кусок кода с таким присвоением выложите, я посмотрю, что и как вы присваиваете.

Добавлено через 6 минут
Среда какая?

Добавлено через 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
41
#include <iomanip>
#include <string>
#include <string.h>
 
using namespace std;
 
 
int main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    fstream text;
    char buff;
    string format_text;
    format_text="";
    text.open("C:\\text.txt");
    if (text)
    {
        while (!text.eof())
        {
            text.get(buff);
            if ((buff=='(')&&(format_text[format_text.length()]!=' '))
                format_text+=" ";
            format_text+=buff;
            if (((buff=='.')||(buff==',')||(buff=='?')||(buff=='!')||(buff==')'))&&(text.peek()!=' '))
                format_text+=" ";
 
        }
    }
    else cout <<"Ошибка открытия файла!!/n";
    text.close();
    text.open("C:\\text.txt",ios::out);
    if(text)
    {
    text <<format_text;
    text.close();
    }
    else cout <<("/nВозможно у вас нет прав доступа!!");
    system("pause");
    return 0;
}
Добавлено через 10 минут
Тут может почитать про operator+= для string: http://www.cplusplus.com/reference/s...ng/operator+=/
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
25.11.2013, 20:19  [ТС]     Работа с текстовыми файлами #12
Цитата Сообщение от alsav22 Посмотреть сообщение
А мне зачем? Специально скрины сделал, для подтверждения. Кусок кода с таким присвоением выложите, я посмотрю, что и как вы присваиваете.

Добавлено через 6 минут
Среда какая?

Добавлено через 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
41
#include <iomanip>
#include <string>
#include <string.h>
 
using namespace std;
 
 
int main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    fstream text;
    char buff;
    string format_text;
    format_text="";
    text.open("C:\\text.txt");
    if (text)
    {
        while (!text.eof())
        {
            text.get(buff);
            if ((buff=='(')&&(format_text[format_text.length()]!=' '))
                [COLOR="Red"]format_text+=" ";[/COLOR]
            format_text+=buff;
            if (((buff=='.')||(buff==',')||(buff=='?')||(buff=='!')||(buff==')'))&&(text.peek()!=' '))
               [COLOR="Red"] format_text+=" ";[/COLOR]
 
        }
    }
    else cout <<"Ошибка открытия файла!!/n";
    text.close();
    text.open("C:\\text.txt",ios::out);
    if(text)
    {
    text <<format_text;
    text.close();
    }
    else cout <<("/nВозможно у вас нет прав доступа!!");
    system("pause");
    return 0;
}
Добавлено через 10 минут
Тут может почитать про operator+= для string: http://www.cplusplus.com/reference/s...ng/operator+=/
Компилируется) честно) среда VS2010... Вот что хотите думайте. Выделил присваивания в которых если я бы писал ' ' мой компилятор выдаёт ошибку. И групаш которому я эту прогу писал без проблем сразу откомпилировал. Я как бы не говорю что вы говорите не правду, но факт у меня все работает именно так как написано в этом коде, а когда писал так как говорите Вы не работало. В чем здесь соль я не знаю и если честно про работу оператора += для string не читал, я учусь методом "проб и ошибок". И вообще мне с Вами спорить понту я в программирование новичок, а у вас познания вроде как отличные, я просто сказал как есть, думал может Вы ошиблись, у всех как говорится бывает). Я обязательно почитаю про += для string, но факт все работает.

Добавлено через 3 минуты
C++
1
string& operator+= (const string& str);
не знаю правильный ли я пример Вам сейчас показываю, но это как раз из той ссылки которую вы мне дали, и вот еще от туда же, тоже вроде что-то похожее
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// string::operator+=
#include <iostream>
#include <string>
 
int main ()
{
  std::string name ("John");
  std::string family ("Smith");
  [COLOR="Red"]name += " K. ";[/COLOR]         // c-string
  name += family;         // string
  name += '\n';           // character
 
  std::cout << name;
  return 0;
}
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.11.2013, 06:24     Работа с текстовыми файлами #13
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
Компилируется) честно) среда VS2010...
Сказки не рассказывайте. Вот вам скрин, как этот код компилируется в 10 студии (скомпилироваться он просто не сможет). Если что-то и компилируется, то значит компилируете не этот код. Потом, я вас просил выложить кусок кода, с тем присваиванием char, который у вас выдаёт ошибку (о которой вы пишите), чтобы я мог посмотреть именно на код, а не читать ваши описания или скрины смотреть (это далеко не одно и тоже). Код в студию, который выдаёт ошибку!
Миниатюры
Работа с текстовыми файлами  
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.11.2013, 06:36     Работа с текстовыми файлами #14
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
не знаю правильный ли я пример Вам сейчас показываю, но это как раз из той ссылки которую вы мне дали, и вот еще от туда же, тоже вроде что-то похожее
Похожее на что? Вот эту строчку видите:
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
name += '\n'; // character
К string что добавляется?
Миниатюры
Работа с текстовыми файлами  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2013, 16:20     Работа с текстовыми файлами
Еще ссылки по теме:

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

С++ работа с текстовыми файлами - C++
Здравствуйте. Я только начинаю знакомиться с средой C++, учусь работать с файлами, самое базовое типа ввода и вывода данных. Так вот, может...

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

Работа с текстовыми файлами - C++
Дан файл f компонентами которого являются целые числа.В файл g переписать все неположительные компонетны f кратные 8.

Работа с текстовыми файлами - C++
Здравствуйте! Как подсчитать количество букв, которые встретились в тексте двойными? Помогите пожалуйста Добавлено через 23 минуты ...


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

Или воспользуйтесь поиском по форуму:
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
26.11.2013, 16:20  [ТС]     Работа с текстовыми файлами #15
Вот компилируемый код:
Работа с текстовыми файлами
здесь я использую
C++
1
format_text+=" ";
Вы можете это увидеть.
Блин как вы пишите так тоже компилирует!
C++
1
format_text+=' ';
Но как видите
C++
1
format_text+=" ";
компилятор проглатывает и это.
Ладно благодарю за беседу разберу работу со строками как только выделится немного времени, а сейчас есть малость напряжная другая тема.
Yandex
Объявления
26.11.2013, 16:20     Работа с текстовыми файлами
Ответ Создать тему
Опции темы

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