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

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

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

Author24 — интернет-сервис помощи студентам
Люди добрые кто может подскажите))
Задание: Дан текстовый файл, проставить пробелы после знаков препинания ",.?!" если он отсутствует, поставить пробел перед ( и после ) если он отсутствует. Есть небольшие наработки, застрял на том: что не знаю как в текстовом файле заменить слово (могу записать в конец или на место курсора, но вот как заменить слово разобраться не могу)...
Пример:
Дано:Вася Петя,номер завтра(поможем) когда.вот
Получим: Вася Петя, номер завтра (поможем) когда. Вот
Помогите пожалуйста очень срочно нужно. Вот пока то что накидал:
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(если это имеет значение)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2013, 22:35
Ответы с готовыми решениями:

Работа с текстовыми файлами
Есть програма которая используя числа из текстового файла input.txt и решает по формуле указанной в...

Работа с текстовыми файлами
Задача: написать программу, которая считывает слова из текстового файла. Слова разделены символом...

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

Работа с текстовыми файлами
Доброго времени суток. Есть ф-ия: void FillM(int **&amp;tab, int &amp;w, int &amp;h) { FILE *f;...

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

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

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

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

Добавлено через 25 минут
Все разобрался с peek()... Спасибо что натолкнули на хорошую идею, что то сам не додумался посимвольно читать файл, так намного проще)
0
5498 / 4893 / 831
Регистрация: 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 секунд
Со скобками немного по-другому, сами додумаете.
0
5498 / 4893 / 831
Регистрация: 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;
}
Миниатюры
Работа с текстовыми файлами   Работа с текстовыми файлами   Работа с текстовыми файлами  

0
18 / 18 / 3
Регистрация: 16.09.2013
Сообщений: 126
25.11.2013, 16:28  [ТС] 10
Ну мне же врать зачем?) У меня работает все, а вот если пытаюсь string-у присвоить ' '; ошибку дает, если подскажите как тут скрин кидать я скину) А так еще раз благодарю за идею, ну и ваш пост по переводу русских символов в верхний регистр тоже очень помог.
0
5498 / 4893 / 831
Регистрация: 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/refer... perator+=/
0
18 / 18 / 3
Регистрация: 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/refer... perator+=/
Компилируется) честно) среда 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;
}
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.11.2013, 06:24 13
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
Компилируется) честно) среда VS2010...
Сказки не рассказывайте. Вот вам скрин, как этот код компилируется в 10 студии (скомпилироваться он просто не сможет). Если что-то и компилируется, то значит компилируете не этот код. Потом, я вас просил выложить кусок кода, с тем присваиванием char, который у вас выдаёт ошибку (о которой вы пишите), чтобы я мог посмотреть именно на код, а не читать ваши описания или скрины смотреть (это далеко не одно и тоже). Код в студию, который выдаёт ошибку!
Миниатюры
Работа с текстовыми файлами  
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.11.2013, 06:36 14
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
не знаю правильный ли я пример Вам сейчас показываю, но это как раз из той ссылки которую вы мне дали, и вот еще от туда же, тоже вроде что-то похожее
Похожее на что? Вот эту строчку видите:
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
name += '\n'; // character
К string что добавляется?
Миниатюры
Работа с текстовыми файлами  
0
18 / 18 / 3
Регистрация: 16.09.2013
Сообщений: 126
26.11.2013, 16:20  [ТС] 15
Вот компилируемый код:
Работа с текстовыми файлами

здесь я использую
C++
1
format_text+=" ";
Вы можете это увидеть.
Блин как вы пишите так тоже компилирует!
C++
1
format_text+=' ';
Но как видите
C++
1
format_text+=" ";
компилятор проглатывает и это.
Ладно благодарю за беседу разберу работу со строками как только выделится немного времени, а сейчас есть малость напряжная другая тема.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.11.2013, 16:24 16
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
Вот компилируемый код: Вложение 333692
здесь я использую Код C++1
format_text+=" ";
Вы простую просьбу может выполнить? Я просил не тот код, который компилируется (и не во вложении, а здесь текст выложить), а который выдаёт ошибку.
Цитата Сообщение от alsav22 Посмотреть сообщение
Код в студию, который выдаёт ошибку!
Добавлено через 1 минуту
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
Блин как вы пишите так тоже компилирует!
Вот мне и интересно увидеть, как вы так интересно пишите пробел, что не компилируется.
0
18 / 18 / 3
Регистрация: 16.09.2013
Сообщений: 126
26.11.2013, 16:29  [ТС] 17
)И да я вам в личку походу не тот код кинул там библиотек куча не подключено, естественно он не будет компилироваться), вот последний вариант скомпилированного кода:
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <Windows.h>
#include <iomanip>
#include <string>
#include <string.h>
#include <cctype>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Russian");
    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()-1]!=' '))
                format_text+=" ";
            format_text+=buff;
            if (((buff=='.')||(buff==',')||(buff=='?')||(buff=='!')||(buff==')'))&&(text.peek()!=' '))
            {
                format_text+=" ";
                if ((buff!=',')&&(buff!=')'))
                {
                    text.get(buff);
                    buff=char(toupper((unsigned char)buff));
                    format_text+=buff;
                }
            }
 
        }
    }
    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;
}
Вот) Ну ладно спасибо за диалог) и хорошие подсказки...
Тему можно закрыть)
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.11.2013, 16:31 18
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
Тему можно закрыть)
Как насчёт просьбы?
0
18 / 18 / 3
Регистрация: 16.09.2013
Сообщений: 126
26.11.2013, 16:35  [ТС] 19
Цитата Сообщение от alsav22 Посмотреть сообщение
Как насчёт просьбы?
Извините не понял? какой?

Добавлено через 2 минуты
На счет фрагмента кода? Так я вроде написал же что как написали вы тоже компилирует.
т.е
C++
1
format_text+=' ';
работает правильно...
0
alsav22
26.11.2013, 16:53     Работа с текстовыми файлами
  #20

Не по теме:

Цитата Сообщение от Alex_Skripa Посмотреть сообщение
Извините не понял? какой?
С вами всё ясно.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2013, 16:53

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

Работа с текстовыми файлами
Мне нужно разработать программу, выводит на экран по желанию пользователя: 1) N первых строк файла;...

Работа с текстовыми файлами
Дан текстовый файл. Напечатать все строки, длина которых равна данному числу.

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


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

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