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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
nikita_16
9 / 9 / 0
Регистрация: 25.07.2012
Сообщений: 79
12.09.2012, 23:44     Считывается только первое слово из строки #1
Считываю строки из файла. Почему-то считывается только первое слово из строки. Помогите
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++
Строки. Перевернуть первое слово. C++
C++ Дано предложение. Нужно вывести на экран только первое слово предложения
C++ Как считать первое слово из каждой строки?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 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++;
    }
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
13.09.2012, 12:07     Считывается только первое слово из строки #3
До разделителя, а не до пробела :-)
Табуляция, перевод строки, перевод каретки тоже считаются.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2012, 12:23     Считывается только первое слово из строки #4
Согласен. Ещё, все это вместе, называют "стандартным пробельным символом".
fier
127 / 12 / 1
Регистрация: 05.08.2013
Сообщений: 222
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
1032 / 771 / 260
Регистрация: 29.01.2016
Сообщений: 2,413
22.09.2016, 00:02     Считывается только первое слово из строки #6
Цитата Сообщение от fier Посмотреть сообщение
Подскажите пожалуйста, в чём может быть проблема
Подозреваю, что в этом:
Цитата Сообщение от fier Посмотреть сообщение
в C++ Builder 6
Первый вариант должен работать, вне зависимости от содержания файла.

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

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

Без архива не загружается на форум - пишет, что некорректный формат файла.
nd2
1032 / 771 / 260
Регистрация: 29.01.2016
Сообщений: 2,413
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 / 1
Регистрация: 05.08.2013
Сообщений: 222
22.09.2016, 00:18     Считывается только первое слово из строки #9
Цитата Сообщение от nd2 Посмотреть сообщение
Подозреваю, что в этом:
Вполне вероятно - довольно глючная IDE

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

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

Добавлено через 2 минуты
Ошибка в том, что ты файл читаешь как бинарный, а потом используешь строковые функции для вывода содержимого.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2016, 00:33     Считывается только первое слово из строки
Еще ссылки по теме:

C++ Ввод предложения в консольном приложении: в переменную попадает только первое слово
C++ Определить, содержит ли последнее слово строки букву, с которой начинается первое слово
Функция, выделяющая первое слово из строки C++

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

Или воспользуйтесь поиском по форуму:
fier
127 / 12 / 1
Регистрация: 05.08.2013
Сообщений: 222
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);
Yandex
Объявления
22.09.2016, 00:33     Считывается только первое слово из строки
Ответ Создать тему
Опции темы

Текущее время: 06:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru