Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2009, 01:00   #1
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
Вопрос ifstream

Подскажите пожалуйста, как я могу сортировать данные, которые считываются из файла, путем

ifstream("text.txt");
src>>text;

в переменную текста std::string text; ?

Какой мне синтаксис использовать, что бы сортировать поступаемый текст? Например, поместить в переменную текст, но не весь, а до определенного символа, и наоборот, начать запись текста в переменную с определенного символа? Заранее Благодарю!
Артэс вне форума Ответить с цитированием
Старый 19.06.2009, 01:34   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Артэс
Например, поместить в переменную текст, но не весь, а до определенного символа
Пример:
Код:
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
using namespace std;

int main()
{
string text;
ifstream f("text.txt");

getline(f,text,'s'); //считывает до буквы 's'
cout<<text<<endl;

f.close();
getch();
return 0;
}
Цитата:
Сообщение от Артэс
и наоборот, начать запись текста в переменную с определенного символа?
Ну а это, наверное, в цикле. Как-нибудь так:
Код:
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
using namespace std;

int main()
{
string text="";
ifstream f("text.txt");
char c;
bool fl=false;

while(!f.eof())
 {
  c = f.get();
  if(c=='s') fl=true;
  if(fl) text += c;
 }
cout<<text<<endl;

f.close();
getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 19.06.2009, 10:23   #3
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Большое спасибо!
Артэс вне форума Ответить с цитированием
Старый 20.06.2009, 00:30   #4
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Теперь пытаюсь считать таким же способом, как во втором примере через get(), но не из файла, а из переменной... если раньше было c = f.get(); то теперь пытаюсь c = a.get(); предварительно задав эту переменную char a[100]; ... естественно после объявления переменной, в нее заносятся данные, а уже позже, я пытаюсь их считать... но не получается. Компилятор пишет ошибку:
Код:
62 main.cpp request for member `get' in `a, which is of non-class type `char[100]'
Артэс вне форума Ответить с цитированием
Старый 20.06.2009, 01:03   #5
assasin
Форумчанин
 
Регистрация: 27.04.2009
Сообщений: 123
По умолчанию

Естественно, функция-то с потоками работает))) Если хотите вести сверку в строке с символом, то просто делайте это в цикле, пока не встретите нужный символ... а так, в вашем примере, компилятор вполне логично пытается углядеть объект класса)))
<= P.S. если я тебе помог нажми весы слева <=
assasin вне форума Ответить с цитированием
Старый 20.06.2009, 12:25   #6
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

так дело в том что я хочу получать символы из переменной char a[100]; а не из файла, путем ifstream f, как было прежде.
Артэс вне форума Ответить с цитированием
Старый 20.06.2009, 12:33   #7
assasin
Форумчанин
 
Регистрация: 27.04.2009
Сообщений: 123
По умолчанию

так сделайте к примеру в цикле for(int i =0; i <=strlen(a); i ++) сравнивание, пока не встретится нужный символ
<= P.S. если я тебе помог нажми весы слева <=
assasin вне форума Ответить с цитированием
Старый 20.06.2009, 13:09   #8
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

так не в цикле проблема! Я хочу знать, какой синтаксис нужно использовать, что бы так же помещать символы в переменную, а потом сравнивать, как было указано в одном из примеров:
Код:
...
c = f.get();
if(c=='s') fl=true;
...
но проблема то в том, что я хочу брать символы не из f, что является ifstream f("text.txt"); а из обычной переменной как char a[100]; потому и решил заменить f на a, и получилось
Код:
...
c = a.get();
if (c == 's') fl=true;
...
Но компилятор жалуется
Код:
62 main.cpp request for member `get' in `a', which is of non-class type `char[100]'
Я не знаю, может данные переменной "а" нужно предварительно преобразовать как-нибудь. Или же просто другой синтаксис, вместо "a.get();". Не знаю. Вот и спрашиваю)
Артэс вне форума Ответить с цитированием
Старый 20.06.2009, 13:18   #9
assasin
Форумчанин
 
Регистрация: 27.04.2009
Сообщений: 123
По умолчанию

Я выше все и написал уже. Нельзя делать так, как делаешь ты, не класс это! К примеру так:
for(int i=0; i <= strlen (a); i++)
{
if(a[i]=='s') fl=true;
if(fl) text += a[i];
}
<= P.S. если я тебе помог нажми весы слева <=
assasin вне форума Ответить с цитированием
Старый 20.06.2009, 20:56   #10
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Если очень хочется, можно сделать std::istringstream.
Код:
#include <iostream>
#include <sstream>

using namespace std;

int main()
{
	string inputString("qwer,tyu,h,dd");
	istringstream in(inputString);
	string s;
	getline(in, s, ',');
	cout << s;
	cin.peek();
}
Somebody вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с std::ifstream.eof() alex8 Общие вопросы C/C++ 5 05.05.2009 18:24