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

Создание массива из строк - C++

Восстановить пароль Регистрация
 
Remk
0 / 0 / 0
Регистрация: 21.01.2011
Сообщений: 7
13.05.2013, 18:03     Создание массива из строк #1
В общем есть файл-словарик, в нем строки типа:
popov-valera
petrov-vasily
ivanov-grisha

Программа должна считывать этот словарик переводя в массив типа char для дальнейшего использования.
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
#include <iostream> 
#include <cstdlib>
#include <fstream>
using namespace std;
 
int main(void) {    
    ifstream dictionary("dictionary.txt");
    if(!dictionary){
        cout << "error: No file";
        return 0;
    }
    string s;
    char words[11][255]; //11 потому что в словаре 11 имен, пока
    while(!dictionary.eof()){
        dictionary>>s;
        cout << s;
        cout << endl;
                //Списком вывести получется, каждую строку
        for(int i=0;i<=11;i++){
            words[i][255] = s; //а вот перевести стринг в чар уже нет. Подскажите как запилить строки в массив?
        }
    }
        
 
        //таким массив должен быть насколько я понимаю
    //char words[][255]={"popov-valera","petrov-vasily","ivanov-grisha"};
 
    return 0;
}
буду премного благодарен за помощь. Может кто натолкнет на более умный способ записать содержимое файла построчно сразу в массив.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ден90
2 / 2 / 0
Регистрация: 19.11.2012
Сообщений: 55
13.05.2013, 18:28     Создание массива из строк #2
Обязательно ли Вам использовать массив именно в таком виде?
Если да, то :
C++
1
2
3
4
 for(int i=0;i<=11;i++){
     for(int j = 0; j < sizeof(s - 1); j++)
         words[i][j] = s[j];
}
вроде как-то так, но в остальных элементах массива(за пределами длинны слова) будет мусор, ведь размер его строки, так сказать, 255, а слова явно короче
Для таких вещей используют std::map

Добавлено через 11 минут
Вы пытались элементу с координатами [i][255] присвоить строку, тогда как это массив символов.
Remk
0 / 0 / 0
Регистрация: 21.01.2011
Сообщений: 7
13.05.2013, 18:30  [ТС]     Создание массива из строк #3
Цитата Сообщение от Ден90 Посмотреть сообщение
Обязательно ли Вам использовать массив именно в таком виде?
Если да, то :
C++
1
2
3
4
 for(int i=0;i<=11;i++){
     for(int j = 0; j < sizeof(s - 1); j++)
         words[i][j] = s[j];
}
вроде как-то так, но в остальных элементах массива(за пределами длинны слова) будет мусор, ведь размер его строки, так сказать, 255, а слова явно короче
Для таких вещей используют std::map

Добавлено через 11 минут
Вы пытались элементу с координатами [i][255] присвоить строку, тогда как это массив символов.
Эта конструкция не работает. Консоль выдает что то ужасное и непонятное. Если разница есть, то я забыл упомянуть, что сижу под Linux
Ден90
2 / 2 / 0
Регистрация: 19.11.2012
Сообщений: 55
13.05.2013, 18:39     Создание массива из строк #4
ну да, sizeof(s-1) != s.size() - 1; =)
нужно s.size() и наверно без -1; и оно должно вывести первые символы правильно, ну а дальше мусор

Добавлено через 2 минуты
но, если можно, в любом случае нужно использовать контейнер std::map либо std::multimap
Remk
0 / 0 / 0
Регистрация: 21.01.2011
Сообщений: 7
13.05.2013, 22:47  [ТС]     Создание массива из строк #5
Цитата Сообщение от Ден90 Посмотреть сообщение
ну да, sizeof(s-1) != s.size() - 1; =)
нужно s.size() и наверно без -1; и оно должно вывести первые символы правильно, ну а дальше мусор

Добавлено через 2 минуты
но, если можно, в любом случае нужно использовать контейнер std::map либо std::multimap
К сожалению, я не знаю как использовать эти контейнеры =) впервые пишу на C++

Что-нибудь попробую

Добавлено через 1 час 1 минуту
Код
[CPP]
#include <iostream>
#include <cstdlib> 
#include <fstream>
using namespace std;
#define N 100

int main(void) {
	
	ifstream dictionary("dictionary.txt");
	if(!dictionary){
        cout << "error: No file";
    	return 0;
    }
	string s;
	char words[N][N];
	while(!dictionary.eof()){
		dictionary>>s;
		for(int i=0;i<=N;i++){
     		for(int j = 0; j < s.size(); j++)
         		words[i][j] = s[j];    		
		}	
	}
	for(int k=0; k<=N;k++){
	cout << words[1][k];
	}

	return 0;
}



[/CPP]
По крайней мере ошибок нет =/ но не выводит

Добавлено через 2 часа 45 минут
Закрывайте тему, разобрался
Yandex
Объявления
13.05.2013, 22:47     Создание массива из строк
Ответ Создать тему
Опции темы

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