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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
rayman
Сообщений: n/a
#1

Текст и двумерный массив. - C++

05.12.2010, 11:06. Просмотров 517. Ответов 1
Метки нет (Все метки)

Смысл такой: есть файл c текстом. Нужно его открыть, и каждое слово в отдельности перенести в свой элемент массива. (все динамическое). Подскажите как сделать грамотнее, мой вариант не работает, ошибку отследить трудно, сам запутался уже, сижу долго над ней.
Код
        char ch;
	char **a;
	int c=0, v=0, w=0,s=0;
	
	ifstream fin("text.txt");
	
	while (fin) //определяю кол-во пробелов, значит столько будет и слов
	{
		fin.get(ch);
		cout << ch;
		if (ch==' ')
		s=s+1;
	}
	
	fin.clear(); 
	fin.seekg(0, ios::beg); //пытаюсь перевести указатель обратно в начало. 

	a = new char *[s+1]; //создаю массив указателей, равный кол-ву слов. 
	v=0;
	c=0;
        //а дальше приколюхи
	while (fin) // пока не достигнут конец  файла - мутим
	{
		w=0;
		fin.get(ch);

		while((fin)&&(ch!=' ')&&(ch!=',')&&(ch!='.')) //пока не встретится конец и заданые символы, смотрим длинну текущего слова.
		{	
			c=c+1; //где сейчас указатель
			w=w+1; //длинна слова
			fin.get(ch);
		}

		fin.clear();
	        fin.seekg(c-w, ios::beg); //тут я пытаюсь относительно начала файла сместить указатель назад на длинну текущего слова. 

		a[v] = new char [w]; //делаю массив под слово

		for (int i=0; i<w; i++) // пишу символы слова в созданный для него массив
		{	
			fin.get(ch);
			a[v][i]=ch;
			cout << "2";
		}

		v=v+1;
	}

	fin.close();
	system("pause");

	return 0;
Проходит пару слов и зацикливается на первом while, игнорируя второй while и for.
Вечно дурацкий вариант по лабам попадается =(
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2010, 11:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Текст и двумерный массив. (C++):

Считать текст из файла в двумерный массив - C++
Всем привет! Проблема такая. У меня есть текст 4х4 например 44rr r5r5 tttt eeee Мне нужно загнать его в двумерный массив....

Записать текст из файла в двумерный массив - C++
Добрый день. Нужно загрузить текст из файла в двумерный массив. Например, текст вот такой dghgh sfhgsghf shshghgjsfjf ...

Как считать из файла текст в двумерный массив типа char и отсортировать в алф. порядке? - C++
Постановка задачи: Исходные данные считать из текстового файла через отдельную функцию. Дана строка символов, состоящая из...

Как можно вложить двумерный массив в двумерный? - C++
Нужно написать программу перемножения двух матриц размерностью МxМ, элементы которых, матрицы размерностью КxК... Подскажите (желательно с...

Массив: Как скопировать двумерный массив в другой массив? - C++
Как скопировать двумерный массив в другой массив?

Массив: преобразорвать двумерный массив в одномерный и отсортировать его методом пузырька - C++
всем привет. народ помогите с прогой, конкретно с функцией sort (65 строка), она должна двухмерный массив перевести построчно в одномерный...

1
RvP
2 / 2 / 0
Регистрация: 11.05.2010
Сообщений: 15
05.12.2010, 11:15 #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
32
33
#include <iostream>
#include <string>
#include <vector>
 
std::vector<std::string> str_explode(std::string div,std::string str)
{
    std::vector<std::string> t;
    size_t cpt=str.find_first_of(div);
    do
    {
        t.push_back(str.substr(0, cpt)) ;
        str = str.substr(cpt+1);//длина каждого отдельного делиметера 1!!, или поставить свою
        cpt = str.find_first_of(div);
    }while (cpt!=str.npos);
    return t;
}
 
//слово-последовательность символов длинной больше 2х, ограниченая с обеих сторон пробелами
void main()
{
    FILE *f=fopen("input.txt", "rt");
    if(!f)return;
    while(!feof(f))
    {
        char buf[80];
        fgets(buf, 80, f);
        std::vector<std::string> v1=str_explode(" \n\t",buf);           //or more delimiters
        //тут делаеш что тебе надо
    }
    fclose(f);
    printf("\nNum of the not pair words - %.0f\n", cnt);
    system("pause");
}
в векторе получиш каждое слово отдельно. если надо добавь еще разделителей
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2010, 11:15
Привет! Вот еще темы с ответами:

Массив: Как можно задать и вывести симметричный двумерный массив? - C++
как можно задать и вывести симметричный массив

Чем отличаются двумерный символьный массив и массив указателей на строки - C++
Двумерный символьный массив и массив указателей на строки. Собственно чем они отличаются? Заранее спасибо.

Дан двумерный массив 3х3. Получить одномерный массив из из отрицательных элементов матрицы. - C++
Пожалуйста, помогите решить простым методом задачку, просто не могу понять смысл ее выполнения. Дан двумерный массив 3х3.Получить...

Дан двумерный массив размерностью 4*5. Сформировать одномерный массив - C++
Дан двумерный массив размерностью 4*5, заполненный целыми числами с клавиатуры. Сформировать одномерный массив каждый элемент которого...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru