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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Массивы символов, создать массив 
:(
    Опции темы
Kit0boy
Дата 5.5.2011, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нужно создать массив, каждый элемент которого - это строка из файла. Прочитал много faq'ов, но так и не понял, как присваиваются значения. Вроде как функцией strcpy но не понял как ее использовать.

Код

int main()
{
    char**stroka = new char*[50];
    FILE *f;
    f = fopen(fname,"r");
    int k =0;//k - номер элемента в массиве
    while(!feof(f))
    {
        fgets(str, 256, f); 
        sscanf (str, "%s %s", name, sname, &k);
        stroka[k] = str;
        k++;
    }    
}


Это сообщение отредактировал(а) Kit0boy - 5.5.2011, 22:40
PM MAIL   Вверх
bsa
Дата 5.5.2011, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Kit0boy, ты определись, тебе нужен массив символов или "массив, каждый элемент которого строка".
PM   Вверх
Kit0boy
Дата 5.5.2011, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Запутался, нужно массив из строк. Но если несложно то массив символов тоже хотелось бы узнать как делать.

Это сообщение отредактировал(а) Kit0boy - 5.5.2011, 22:41
PM MAIL   Вверх
mrbrooks
Дата 6.5.2011, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Цитата(Kit0boy @  5.5.2011,  22:29 Найти цитируемый пост)
нужно массив из строк.

входной файл:
Цитата

AAAAA
BBBBB
CCCCC
DDDDD
EEEEE


функция:
Код

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <algorithm>

void kitoboy()
{
    std::ifstream file("test.txt");
    if(!file)
    {
        std::cout << "not found file" << std::endl;
        return;
    }
    typedef std::vector<std::string> Vect;
    typedef std::istream_iterator<std::string> Ii;
    typedef std::ostream_iterator<std::string> Oi;
    Vect vector((Ii(file)),(Ii()));
    std::copy(vector.begin(), vector.end(), Oi(std::cout, "\n"));
    file.close();
}



Цитата(Kit0boy @  5.5.2011,  22:29 Найти цитируемый пост)
Но если несложно то массив символов тоже хотелось бы узнать как делать.

аналогично вышеприведенному.
PM MAIL   Вверх
Kit0boy
Дата 6.5.2011, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Можете пояснить хоть что-нибудь в коде? Или на C написать, а то много стандартных функций и непонятно.
PM MAIL   Вверх
bsa
Дата 6.5.2011, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Kit0boy, для начала определись с языком. В названии темы указан С++, тебе код написан именно на нем.
Надеюсь, строки с 1 по 8 объяснять не надо?
9: создать поток типа файл для чтения из файла "test.txt" (читай: "открыть файл")
10-14: если файл не открылся вывести на экран сообщение об ошибки и завершить работу функции
15: Переименовать вектор строк в тип Vect
16: Переименовать итератор чтения из потока в Ii
17: Переименовать итератор записи в поток в Oi
18: создать объект тип Vect (читай "массив строк") заполнив его содержимым файла
19: скопировать содержимое массива (т.е. от начала и до конца) в поток вывода на экран, разделяя строки символом перевода строки (проще говоря, с новой строки).
20: закрыть файл (в принципе, лишняя операция, так как он все равно закроется при уничтожении объекта file)
PM   Вверх
sergioK1
Дата 7.5.2011, 19:02 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(bsa @ 6.5.2011,  18:42)
Kit0boy,закрыть файл (в принципе, лишняя операция, так как он все равно закроется при уничтожении объекта file)

Вот тут не согласен , хороший стиль - закрывать  явно , объест уничтожаеться процессом а десриптор файла нет, то есть  да но когда неизвестно, за это отвечает OS, не надо ее напрягать  smile 
У меня  пару раз происходили всякие чудеса из-за этого , в основном при отладке  но не только, причем не важно это С++ или на чем то другом, когда код не свой то сходу не видишь в чем причина,

Может у меня устаревший подход к подобным вещам ??








Это сообщение отредактировал(а) sergioK1 - 7.5.2011, 20:41
PM MAIL   Вверх
borisbn
Дата 7.5.2011, 21:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



Цитата(sergioK1 @  7.5.2011,  19:02 Найти цитируемый пост)
Может у меня устаревший подход к подобным вещам ??

 smile 
http://stackoverflow.com/questions/748014/...lose-a-ifstream
коротко:
Цитата

In the standard (27.8.1.5 Class template basic_ifstream), ifstream is to be implemented with a basic_filebuf member holding the actual file handle. It is held as a member so that when an ifstream object destructs, it also calls the destructor on basic_filebuf. And from the standard (27.8.1.2), that destructor closes the file:

virtual ˜basic_filebuf();
Effects: Destroys an object of class basic_filebuf<charT,traits>. Calls close()


ещё короче: в деструкторе класса std::ifstream файл закрывается ( вызывается close() ).
А вот если пользоваться функциями Си (fopen и т.п.), то полностью с тобой согласен - закрывать нужно вручную


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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