Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить массив строк из файла 
:(
    Опции темы
Redstuff
Дата 12.5.2007, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Получить массив строк из файла.
По поиску нашел несколько примеров, но чето не разбирусь в них.

 smile 


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
boriska
Дата 12.5.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 7.12.2006
Где: kharkov

Репутация: нет
Всего: нет



это смотрел, что именно не понятно???
PM MAIL ICQ   Вверх
Damarus
Дата 12.5.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 6
Всего: 29



Код
#include <iostream>
#include <string>
#include <vector>
#include <fstream>

int main(int argc, char *argv[])
{
    std::ifstream input("test.txt");

    std::vector<std::string> array;

    std::copy(std::istream_iterator<std::string>(input), std::istream_iterator<std::string>(),
        std::back_inserter<std::vector<std::string> >(array));
}

PM MAIL ICQ Jabber   Вверх
Redstuff
Дата 13.5.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



boriska, Да смотрел... vector не понятен

В этом примере только кол-во строк.
Код

// и начерта мне этот cout ?
#include <iostream>
// файловые операции
#include <cstdio>
// строковые функции
#include <cstring>
using namespace std;

// массив символов
typedef char string831[81];

// 2 returna
string831 * add(string831 * array,int &N ,string831 ne)
{
  // создаем увеличенную копию динамического массива строк
  string831 * y = new string831[N+1];
   for(int i=0;i<N;i++)
   {
       strcpy(y[i] , array[i]);
   }
   if(N)
       delete [] array;
   strcpy(y[N],ne);
   // увеличиваем количество элементов
   N++;
  // возвращаем адрес в куче
   return y;
}

main()
{
    string831 * x=NULL,s; int N=0;
     // открываем файл для чтения
    FILE * f = fopen("Dynamic83.cpp","rt");
     // читаем строки
    while( fgets(s,80,f ) )
       // расширяем динамический массив
        x=add(x,N,s);
    fclose(f);
    // vivod masiva x
    cout<<N<<'\n';
    delete [] x;

}





--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
boriska
Дата 13.5.2007, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 7.12.2006
Где: kharkov

Репутация: нет
Всего: нет



Redstuff, а что vector, vector - контейнер из стандартной библиотеки, в сети 
много инфы на эту тему (на  rsdn.ru раздел STL например)
Почитай Н.Джосьютис "С++ Стандартная библиотека" или Леен Аммераль "STL для программистов на С++" в теме  литература, 
посмотришь где скачать можно.

А по поводу
Цитата

В этом примере только кол-во строк. 

Что не понятно ???  smile 
string831 *x указывает на твой массив строк
 

Это сообщение отредактировал(а) boriska - 13.5.2007, 15:46
PM MAIL ICQ   Вверх
Redstuff
Дата 14.5.2007, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Переменная s типа char?
Код

 // читаем строки
    while( fgets(s,80,f ) )
       // расширяем динамический массив
        x=add(x,N,s);

Как тогда переменную s сравнить с др. строкой?

Например в файле:
Код

string1
string2
string3


Код

while( fgets(s,80,f ) ) {
       // расширяем динамический массив
                x=add(x,N,s);
    if(s=="string2")   // кстати учитываются спец. символы?
        cout << "строка " << N << " равна заданой строке" << endl;
    else cout<<"нет совпадений";
}



--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
JackYF
Дата 14.5.2007, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Redstuff @  14.5.2007,  20:24 Найти цитируемый пост)
s=="string2"

Код

strcmp(s,"string2")==0



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Redstuff
Дата 15.5.2007, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



JackYF, спасибо, это наверно самый простой способ )

все таки спец символы тоже надо учитывать )

Код

strcmp(s,"string2/n")==0



Код

while( fgets(s,80,f ) ) {
       // расширяем динамический массив
                x=add(x,N,s);
    if(strcmp(s,"string2/n")==0) 
        cout << "строка " << N << " равна заданой строке" << endl;
    else cout<<"нет совпадений";
}
// за пределами цикла while
cout<<s; // выводит string3 (последнюю строку)
cout<<s[0]; // выводит первый символ последней строки s

Как вывести любую другую строчку?

Можно просто массив дополнительный ввести и там сохранять каждую строчку как элемент?
Код

string content[] = {"string1", "string2", "string3"};
cout << content[1] // string2






--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
boriska
Дата 15.5.2007, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 7.12.2006
Где: kharkov

Репутация: нет
Всего: нет



Redstuff, внимательнее читай, я же тебе писал уже...
У тебя есть указатель string831 *x, который указывает на твой массив динамически размещенный в памяти,
его и используй для доступа к элементам этого массива.
Т.е. 
Код

for(int i = 0; i < N; ++i)
       cout << x[i];


а вообще конечно  сядь и прочти вводный курс по с++, ибо ты "плаваешь" в элементарных вещах   smile  


Это сообщение отредактировал(а) boriska - 15.5.2007, 01:51
PM MAIL ICQ   Вверх
JackYF
Дата 15.5.2007, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Redstuff @  15.5.2007,  00:02 Найти цитируемый пост)
strcmp(s,"string2/n")==0


Ну, во-первых, спецсимвол '\n' (слэш в обратную сторону), а во-вторых, такое при вводе в строку не пишется (если очень не извратнуться) и поэтому не проверяется...



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0512 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.