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

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

Войти
Регистрация
Восстановить пароль
 
 
qwerty778
1 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 56
#1

std::string, потоки - C++

23.01.2014, 19:21. Просмотров 1068. Ответов 31
Метки нет (Все метки)

Доброго времени суток! Использую такую конструкцию:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
while(...) {
        while(getline(dic, buf2)) {
                if (buf2 < buf1) continue;
            else if (buf2 == buf1) break;
            else {
                    def << buffer << endl;
            break;
    }
}

После выполнения else if происходит возврат во внешний while, и хотелось бы, чтобы по достижении внутреннего while считывалась бы не новая строка, а использовалась старая.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2014, 19:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос std::string, потоки (C++):

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri - C++
на вод поступают 2 строки типа string. определить количество вхождений строки 2 в строку 1 ошибка error: cannot convert 'std::string {aka...

Потоки и прямая запись в заданый std::string - C++
Есть ли в бусте/последних стандартах C++ поток, пишущий/читающий напрямую в/из заданного std::string? std::stringstream, на сколько я...

запрошено преобразование от ‘const std::string*’ к нескалярному типу ‘std::string’ - C++
private: std::string firstName; }; std::string ClientData::getFirstName() const{ return firstName; } Дает в итоге...

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами - C++
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же числа, но не в виде строк, а в виде...

Реализация класса MyString. Стандартная библиотека, std::string, std::vector - C++
как добавить реализацию конкатенации строк через перегрузку оператора &quot;+=&quot; в классе MyString и почему ошибка выдается???#include...

Операция std::cout для Объекта типа std::string - C++
Кто детально объяснит почему не выводит ? Дает вот так &quot;Отсутствует оператор &quot;&lt;&lt;&quot;, соответствующий этим операндам&quot; void...

31
Ev[G]eN
iOS/Android Developer
Эксперт С++
5097 / 1535 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
23.01.2014, 19:22 #2
задание хотелось бы видеть
0
MrGluck
Модератор
Эксперт CЭксперт С++
7279 / 4440 / 650
Регистрация: 29.11.2010
Сообщений: 12,022
23.01.2014, 19:23 #3
C++
1
2
3
4
5
6
7
8
9
10
while(...) {
    bool flag = true;
        while(getline(dic, buf2) && flag) {
                if (buf2 < buf1) continue;
            else if (buf2 == buf1) flag = false;
            else {
                    def << buffer << endl;
            break;
    }
}
0
qwerty778
1 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 56
23.01.2014, 19:36  [ТС] #4
Ev[G]eN, Это, в общем-то, сравнение слов из словаря со словами из отсортированного файла, то бишь, запись несуществующих слов в файл, орфографическая проверка.

Добавлено через 10 минут
Т.е. мне нужно указатель преместить на строку выше.
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.01.2014, 19:59 #5
Цитата Сообщение от qwerty778 Посмотреть сообщение
Т.е. мне нужно указатель преместить на строку выше.
Как-то так:
C++
1
2
3
4
dic.seekg(-2, ios::cur);
while (dic.peek() != '\n')
    dic.seekg(-1, ios::cur);
dic.seekg(1, ios::cur);
1
qwerty778
1 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 56
23.01.2014, 20:52  [ТС] #6
alsav22, спасибо большое. Хотя по-началу были проблемы, ведь, открыл не в бинарном режиме.
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.01.2014, 21:49 #7
Цитата Сообщение от qwerty778 Посмотреть сообщение
Хотя по-началу были проблемы, ведь, открыл не в бинарном режиме.
В текстовом криво работает?

Добавлено через 46 минут
Для первой строки ещё нужно условие добавить:
C++
1
2
3
4
5
6
7
8
9
10
streamoff pos;
dic.seekg(-2, ios::cur);
while (dic.peek() != '\n')
{
    dic.seekg(-1, ios::cur);
    if ((pos = fin.tellg()) == 0)
                    break;
}
if (pos != 0)
    dic.seekg(1, ios::cur);
0
qwerty778
1 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 56
23.01.2014, 22:14  [ТС] #8
alsav22, да, в текстовом криво. Ок, добавлю
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.01.2014, 22:23 #9
В текстовом вот так будет работать (в windows):
C++
1
2
3
4
5
6
7
8
9
10
streamoff pos;
dic.seekg(-3, ios::cur);
while (dic.peek() != '\n')
{
    dic.seekg(-1, ios::cur);
    if ((pos = fin.tellg()) == 0)
                    break;
}
if (pos != 0)
    dic.seekg(2, ios::cur);
Добавлено через 2 минуты
В текстовом, если peek() встречает '\n', то курсор передвигается на позицию 'r\' (который, в windlows, перед '\n').
0
qwerty778
1 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 56
25.01.2014, 13:28  [ТС] #10
alsav22, От оно чё, каретка. Спасибо)
0
qwerty778
1 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 56
01.02.2014, 18:52  [ТС] #11
alsav22, добрый вечер, сейчас напоролся на проблемку: первая строка в потоке dic - "а", и срабатывает условие равенства buf1==buf2. Программа зацикливается на while.
pos, при этом, равно -1.
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.02.2014, 19:21 #12
Код не вижу.
0
qwerty778
1 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 56
01.02.2014, 19:32  [ТС] #13
alsav22, код Ваш, в этом топике выше
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.02.2014, 20:17 #14
Там чтения нет. С чтением, со сравнением и пр. покажите.
0
qwerty778
1 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 56
01.02.2014, 20:46  [ТС] #15
alsav22, это разные топики) Тут же у меня другая проблема.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2014, 20:46
Привет! Вот еще темы с ответами:

Передача функции указатель на элемент std::vector<std::string> - C++
Доброй ночи тем, кому не спится (или живет в другом часовом поясе:p)! Есть функция, требующая в качестве параметра указатель на...

Почему std::string_view МЕДЛЕННЕЕ, чем std::string? - C++
Всем привет! Нужно найти количество уникальных строк в больших текстовых файлах (размером до нескольких гигабайт). Почему в...

Как правильно перевести std::wstring в std::string ? - C++
Собственно как? :)

Как привести std::wstring к std::string? - C++
Как привести std::wstring к std::string?


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
01.02.2014, 20:46
Ответ Создать тему
Опции темы

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