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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
nikita_16
9 / 9 / 0
Регистрация: 25.07.2012
Сообщений: 79
#1

Считывается только первое слово из строки - C++

12.09.2012, 23:44. Просмотров 1389. Ответов 10
Метки нет (Все метки)

Считываю строки из файла. Почему-то считывается только первое слово из строки. Помогите
C++
1
2
3
4
5
6
    while (a != "%")
    {
        file >> a;
        mass[i] = a;
        i++;
    }
Добавлено через 27 минут
это на vc++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2012, 23:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считывается только первое слово из строки (C++):

Азбука Морзе, кодируется только первое слово строки - C++
проблема в том,что это прога переводит первое слово строчки. #include <iostream> #include <string> using namespace std; int...

В переменную типа string записывается только первое слово строки - C++
Как вписывать предложения в тип string (если возможно)? То есть скажем после string randomstr; cin >> randomstr; // вводим например...

Определить, содержит ли последнее слово строки букву, с которой начинается первое слово - C++
2.) В динамической памяти размещена строка символов. Определить, содержит ли последнее слово строки букву, с которой начинается первое...

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

Даны два слова.Верно ли,что первое слово начинается на ту же букву,на которую заканчивается второе слово (работа с символами строки) - C++
2)Даны два слова.Верно ли,что первое слово начинается на ту же букву,на которую заканчивается второе слово (работа с символами строки)

Ввод предложения в консольном приложении: в переменную попадает только первое слово - C++
Есть код void main() { setlocale(LC_ALL, "rus"); SetConsoleCP(1251); SetConsoleOutputCP(1251); string str; cin >>...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2012, 05:40 #2
Этот оператор >> читает до пробела, поэтому получается чтение слов. Если хотите считать строку целиком, то используйте методы для строкового ввода, например, getline(). Если a - это string, то :
C++
1
2
3
4
5
6
7
8
9
10
11
const int N = 10;
fstream file("filename");
string mass[N];
string a = "";
int i = 0;
while (a != "%" && !file.eof() && i < N)
    {
        getline(file, a);
        mass[i] = a;
        i++;
    }
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
13.09.2012, 12:07 #3
До разделителя, а не до пробела :-)
Табуляция, перевод строки, перевод каретки тоже считаются.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2012, 12:23 #4
Согласен. Ещё, все это вместе, называют "стандартным пробельным символом".
fier
127 / 12 / 2
Регистрация: 05.08.2013
Сообщений: 238
21.09.2016, 23:54 #5
Здравствуйте!
У меня похожая ситуация, поэтому новую тему начинать не буду.

Есть бинарный файл - в нём много пробелов и разных символов,а также обычного текста в кодировке CP-1251.
Разрабатываю программу в C++ Builder 6.

Однако, при чтении из этого файла удаётся почитать только 1-е слово.
Пробовал разными способами

Вот они:
1)ifstream
C++
1
2
3
4
5
6
7
  ifstream f ("example.bin", ifstream::binary);
  f.seekg (0, f.end);
  int length = f.tellg();
  char * buffer = new char [length];
  f.seekg (0, f.beg);
  f.read (buffer, length);
  ShowMessage(buffer);//выводит только первое слово
2)TFileStream
C++
1
2
3
4
5
            Array=new TFileStream("example.bin",fmOpenRead);
            char *buffer = new char[Array->Size];
            Array->Read(buffer, sizeof(buffer));
            Array->Free();
            ShowMessage(buffer);//выводит только первое слово
3)fopen
C++
1
2
3
4
5
6
7
8
9
    char *buffer = NULL;
    int size;
    FILE *f = fopen("example.bin", "rb");
    fseek(f, 0, SEEK_END);
    size = ftell(f);
    rewind(f);
    buffer = malloc(size);
    fread(buffer, 1, size, f);
    ShowMessage(buffer);//выводит только первое слово
4)TStringList
C++
1
2
3
4
    TStringList *file = new TStringList;
    file->LoadFromFile("example.bin");
    String buffer=file->Strings[0];
    ShowMessage(buffer);//выводит только первое слово
Пробовал вот так:
C++
1
2
3
4
5
6
7
8
   ifstream f ("example.bin", ifstream::binary);
   string a = "";
   int i = 0;
   while (!f.eof() && i < 256) {
     getline(f, a);
     i++;
     ShowMessage(a.c_str());//Выводит только 1-е слово
  }*/
Однако, другие файлы, таким-же образом, читаются полностью.
Подозреваю, что в файле присутствуют какие то недопустимые символы.
Подскажите пожалуйста, в чём может быть проблема
nd2
2204 / 1776 / 620
Регистрация: 29.01.2016
Сообщений: 5,701
22.09.2016, 00:02 #6
Цитата Сообщение от fier Посмотреть сообщение
Подскажите пожалуйста, в чём может быть проблема
Подозреваю, что в этом:
Цитата Сообщение от fier Посмотреть сообщение
в C++ Builder 6
Первый вариант должен работать, вне зависимости от содержания файла.

Добавлено через 28 секунд
Файл можешь выложить?

Добавлено через 1 минуту
Может дело в ShowMessage(), а не в чтении из файла?
fier
127 / 12 / 2
Регистрация: 05.08.2013
Сообщений: 238
22.09.2016, 00:10 #7
Вот фрагмент файла example.rar

Без архива не загружается на форум - пишет, что некорректный формат файла.
nd2
2204 / 1776 / 620
Регистрация: 29.01.2016
Сообщений: 5,701
22.09.2016, 00:12 #8
В первом варианте, проверь после чтения количество считанного (или выведи, или в отладчике посмотри):
C++
1
2
3
4
5
    f.read (buffer, length);
    if (f.gcount() == length)
        cout << "Done!" << endl;
    else
        cout << "Error!" << endl;
fier
127 / 12 / 2
Регистрация: 05.08.2013
Сообщений: 238
22.09.2016, 00:18 #9
Цитата Сообщение от nd2 Посмотреть сообщение
Подозреваю, что в этом:
Вполне вероятно - довольно глючная IDE

Добавлено через 4 минуты
С приведённым фрагментом : 53

Длина length и результат ф-и gcount() совпадают.
nd2
2204 / 1776 / 620
Регистрация: 29.01.2016
Сообщений: 5,701
22.09.2016, 00:20 #10
Цитата Сообщение от fier Посмотреть сообщение
Вот фрагмент файла
У тебя там нули, а ShowMessage(), скорее всего, до первого нуля и будет выводить, считая это концом Си-строки (терминальным нулём).

Добавлено через 2 минуты
Ошибка в том, что ты файл читаешь как бинарный, а потом используешь строковые функции для вывода содержимого.
fier
127 / 12 / 2
Регистрация: 05.08.2013
Сообщений: 238
22.09.2016, 00:33 #11
Я проверил так - после записи в buffer

C++
1
2
3
4
ofstream f;
f.open ("example.txt");
f << buffer;
f.close();
В файле example.txt - только первое слово.

Добавлено через 8 минут
Ошибся, извините.
Вот так записываются все слова.
C
1
2
ofstream myFile ("data.bin", ios::out | ios::binary);//бинарный режим
myFile.write (buffer, length);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2016, 00:33
Привет! Вот еще темы с ответами:

Дано предложение. Нужно вывести на экран только первое слово предложения - C++
Дано предложение. Нужно вывести на экран только первое слово предложения

Почему при вводе массива из символов воспринимается только первое слово? - C++
Вот примерный код: char article; int main() { cin &gt;&gt; char; cout &lt;&lt; char; system(&quot;Pause&quot;) ...

Строки. Перевернуть первое слово. - C++
перевернуть первое слово в строке по С++. помогите, за 30 минут нужно сделать !!!((

Функция, выделяющая первое слово из строки - C++
Создать программу которая выделяет первое слово из строки. Нужно использовать именно функцию, спасибо!


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

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

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