IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Строки класса String, Visual C++
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Вася

Репутация: -  0  +


Здравствуйте помогите пожалуйста с задачами:
1) Написать программу, которая считывает текст из файла и выводит на экран только вопросительные предложения из этого текста.
#include "stdafx.h"
#include <fstream>
#include <sstream>
#include <string>
#include <iostream>
using namespace std;
bool isLimit(char c)
{
char lim[]={' ','\t','\n'};
for (int i=0;i<sizeof(lim);++i)
if(c==lim[i])return true;return false;}

int _tmain(int argc, _TCHAR* argv[])
{
ifstream fin("infile.txt",ios::in|ios::nocreate);
if (!fin)
{
cout<<"oshibka otkritiy faila";
return 1;
}
int count=0; string word;
ostringstream sentence;
while(!fin.eof()){
char symb;
while(isLimit(symb=fin.peek()))
{
sentence<<symb;
if(symb=='\n')break;
fin.seekg(1,ios::cur);
}
fin>>word;
sentence<<word;
char last=word[word.size()-1];
if((last=='.')||(last=='!'))
{
sentence.str("");
continue;
}
if(last=='?')
{
cout<<sentence.str();
sentence.str("");
count++;
}
}
if(!count)cout<<"Voprositelnix predlozenii net";
return 0;
}


Две ошибки при компиляции: error C2039: '_Nocreate' : is not a member of 'basic_ios<char,struct std::char_traits<char> >' и error C2065: '_Nocreate' : undeclared identifier
2) Написать программу, формирующую из заданного текстового файла словарь, т.е. текстовый файл, содержащий все слова исходного файла
#include <fstream.h>
#include <iostream.h>
#include <string.h>
#include <stdlib.h>

int main(){
int const length=31;
struct Word{
char word[length];
};
char curword[length];

ifstream fin("example.txt", ios::in|ios::nocreate);
if(!fin){cout<<"ERROR"<<endl; return 1;}

int l=10000;
char *zuf=new char[l];
ofstream out("out.txt",ios::out|ios::nocreate);
if(!out){cout<<"ERROR"<<endl; return 2;}

int const more=1000000;
Word w2[more];
int i=0;
while(!fin.eof()){
if (i>more){cout<<"It is too long file!!! "<<endl;return 3;}
fin>>curword;
i++;
}

for(int g=0;g<i;g++)
for(int k=g;k<i;k++){
if(strcmp(w2[g].word, w2[k].word) > 0){
Word buf=w2[k];
w2[k]=w2[g];
w2[g]=buf;
}
}
int n=0;
while (n<i){
out<<w2[n].word;
n++;
}



return 0;
}


Эта компилируется но не работает
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Две ошибки при компиляции: error C2039: '_Nocreate' : is not a member of 'basic_ios<char,struct std::char_traits<char> >' и error C2065: '_Nocreate' : undeclared identifier
Ошибка на самом деле одна, вторая - наведенная... Дело в том, что флаги ios::nocreate теперь не описаны в <fstream>, поскольку они слишком платформо-зависимы...

Да и вообще я не вижу смысла использовать флаг nocreate при открытии файла на чтение. При ios::out смысл есть, но не при ios::in.

P.S. Программка-то кстати, (первая) тоже не работает...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Вася

Репутация: -  0  +


а как сделать? smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






"Как сделать" что? Открытие файла? Или программу? smile.gif Файл открывается просто так:
ifstream fin("example.txt", ios::in);


А насчет программы... Тебе обязательно использовать stringstream? Или можно ограничиться только использованием string-ов?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Вася

Репутация: -  0  +


Програмку smile.gif не мне в программе главное чтобы класс String присутствовал и все.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Вася

Репутация: -  0  +


ай все понял smile.gif спасибо
а вот тут с ios::out как сделать?
#include <fstream.h>
#include <iostream.h>
#include <string.h>

int main(){
int const length=31;
struct Word{
char word[length];
};
char curword[length];

ifstream fin("example.txt", ios::in|ios::nocreate);
if(!fin){cout<<"ERROR"<<endl; return 1;}

int l=10000;
char *zuf=new char[l];
ofstream out("out.txt",ios::out|ios::nocreate);
if(!out){cout<<"ERROR"<<endl; return 2;}

int const more=1000000;
Word w2[more];
int i=0;
while(!fin.eof()){
if (i>more){cout<<"It is too long file!!! "<<endl;return 3;}
fin>>curword;
i++;
}

for(int g=0;g<i;g++)
for(int k=g;k<i;k++){
if(strcmp(w2[g].word, w2[k].word) > 0){
Word buf=w2[k];
w2[k]=w2[g];
w2[g]=buf;
}
}
int n=0;
while (n<i){
out<<w2[n].word;
n++;
}



return 0;
}

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

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата
ай все понял
blink.gif Зато я ничего не понял...

Вот так можно сделать первую программу:
#include <string>
#include <iostream>
#include <fstream>

using namespace std;

int main() {
ifstream fin("infile.txt", ios::in);

string str;
string all_text = "";
while(!fin.eof()) {
getline(fin, str);
all_text += str;
}

string sentence;
int count = 0, next = 0;
while(all_text.length() > 0) {
sentence = all_text.substr(0, (next = (all_text.find_first_of(".!?") + 1)));
all_text = all_text.substr(next);
if(sentence[sentence.length() - 1] == '?') {
cout << sentence << endl;
count += 1;
}
}
if(!count) {
cout << "no questions" << endl;
}
return 0;
}

 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Вася

Репутация: -  0  +


Я с первой-то понял. А со второй?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Цитата
А со второй?
Со второй - совсем просто: читаешь все слова из входного потока в std::vector<string>, потом удаляешь из него дубликаты: сначала sort, потом - unique_copy в другой вектор или сразу в выходной поток...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Вася

Репутация: -  0  +


не совсем понял а в коде это как и куда записать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Цитата
а в коде это как
А в коде это вот так:

#include <string>
#include <vector>
#include <iostream>
#include <iterator>
#include <fstream>

using namespace std;

void split_string(const std::string& str, vector<string>& v,
const std::string& delim = ",")
{
std::string::size_type lpos = 0;
std::string::size_type pos = str.find_first_of(delim, lpos);
do
{
string s = str.substr(lpos, pos - lpos);
if(!s.empty()) {
v.push_back(s);
}
lpos = ( pos == std::string::npos ) ? std::string::npos : pos + 1;
pos = str.find_first_of(delim, lpos);
}
while(lpos != std::string::npos);
}

int main() {
ifstream fin("infile.txt", ios::in);

ofstream fout("outfile.txt", ios::out);
ostream_iterator<string> out_it(fout, "\n" );

string s;
vector<string> buffer;

while(!fin.eof()) {
getline(fin, s); // читаем очередную строку из файла
split_string(s, buffer, ".,:?! "); // разбиваем ее на слова и заносим их в buffer
}
fin.close();

sort(buffer.begin(), buffer.end()); // сортируем слова по алфавиту

// копируем в выходной файл с удалением дубликатов
unique_copy(buffer.begin(), buffer.end(), out_it);
fout.close();

return 0;
}

yes2.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Вася

Репутация: -  0  +


спасибо
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.04.2024 7:11
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name