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

Записать в вектор строки разной длины из файла - C++

Восстановить пароль Регистрация
 
monnzz
0 / 0 / 0
Регистрация: 10.05.2012
Сообщений: 29
14.02.2013, 17:14     Записать в вектор строки разной длины из файла #1
Всем добрый день, ситуация следующая:
не могу записать в вектор строки разной длины из файла
допустим есть файл под названием first.txt в нем содержатся несколько имен
mike
sveta
vasya
dima
aleks

я хочу прочитать эти строки из файла и записать их в вектор под разными индексами, а затем вывести
на экран, вот мой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <conio.h>
 
using std::cout;
using std::ifstream;
using std::ios;
using std::endl;
using std::vector;
using std::ofstream;
 
 int _tmain(int argc, _TCHAR* argv[])
 {
    ifstream iFile ("first.txt", ios::in);
    if (!iFile)
    {
        cout << "file is not opened";
        return 1;
    }
    const int length = 100;
    char string[length];
    vector<char*> v1;
    while(!iFile.eof())
    {
        iFile.getline (string, length, '\n');
        v1.push_back (string);
    }
    iFile.close (); 
    for (size_t j = 0; j < v1.size (); j++)
          сout << v1[j] << endl;
    cout << "finish" << endl; 
    _getch ();
    return 0;
 }
в момент циклического вывода на экран ничего не выводится, а происходят лишь отступы для строк
затем выводится finish и программа завершается
я нашел проблему, как я понял у меня в вектор каждая новая строка записывается сразу по всем прошлым индексам, перекрывая таким образом прошлые записи, но я не могу понять почему так происходит
то есть в предпоследнем проходе в векторе будет хранится
aleks
aleks
aleks
aleks
aleks
буду очень благодарен, если кто подскажет в чем ошибка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
booker
 Аватар для booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
14.02.2013, 17:24     Записать в вектор строки разной длины из файла #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <conio.h>
 
using namespace std;
 
 int _tmain(int argc, _TCHAR* argv[])
 {
    ifstream iFile ("first.txt", ios::in);
    if (!iFile)
    {
        cout << "file is not opened";
        return 1;
    }
    string temp
    vector<string> v1;
    while(!iFile.eof())
    {
        iFile>>temp;
        v1.push_back (temp);
    }
    iFile.close (); 
    for (size_t j = 0; j < v1.size (); j++)
          сout << v1[j] << endl;
    cout << "finish" << endl; 
    _getch ();
    return 0;
 }
так норм?
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
14.02.2013, 17:24     Записать в вектор строки разной длины из файла #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Я не стал разбираться в вашем коде, поэтому написал свой ​​вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
 
using namespace std;
 
const int n=10;
 
int main ()
{
    vector<string> vec;
    ifstream inp("first.txt", ios::in);
   string tmp;
   if (!inp)
    {
        cout << "file is not opened";
        system("pause>0");
        return 1;
    }
   while(!inp.eof())
   {
       inp >> tmp;
       vec.push_back(tmp);
   }
   inp.close();
   for(int i=0;i<vec.size();i++)
       cout<<vec[i]<<endl;
    system("pause>0");
    return 0;
}
booker
 Аватар для booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
14.02.2013, 17:25     Записать в вектор строки разной длины из файла #4
хаха я первый однако)))
M9ICHIK
 Аватар для M9ICHIK
63 / 63 / 13
Регистрация: 09.12.2012
Сообщений: 458
14.02.2013, 17:30     Записать в вектор строки разной длины из файла #5
monnzz просто в место '\n' в iFile.getline(,,) поставь '\0'
monnzz
0 / 0 / 0
Регистрация: 10.05.2012
Сообщений: 29
14.02.2013, 17:56  [ТС]     Записать в вектор строки разной длины из файла #6
Мужики, спасибо всем большое, респект за помощь
особое спасибо Мяснику так как помог в моем коде

Добавлено через 19 минут
M9ICHIK, разрешите задать вам вопрос, почему с символом терминатора все работает, а с символом новой строки нет?
Означает ли это, что строки в файле разделены терминатором, а не символом новой строки?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2013, 18:20     Записать в вектор строки разной длины из файла
Еще ссылки по теме:

C++ Всевозможные варианты перебора слова разной длины
Записать в вектор среднее значение элементов каждой строки матрицы C++
C++ Записать каждые 16 символов из файла в вектор

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

Или воспользуйтесь поиском по форуму:
booker
 Аватар для booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
14.02.2013, 18:20     Записать в вектор строки разной длины из файла #7
iFile.get (string, '\n');

так можно попробовать, get() вместо getline()
Yandex
Объявления
14.02.2013, 18:20     Записать в вектор строки разной длины из файла
Ответ Создать тему
Опции темы

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