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

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

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

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

05.12.2010, 11:06. Просмотров 506. Ответов 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++
Добрый день. Нужно загрузить текст из файла в двумерный массив. Например, текст вот такой dghgh sfhgsghf shshghgjsfjf ...

Как загнать текст из консоли в массив и как загнать текст из файла в массив - C++
Как загнать текст из консоли в массив и как загнать текст из файла в массив. Как использовать посимвольное чтение в с++?

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

Двумерный массив - C++
1. Написать программу, которая вводит по строкам с клавиатуры двумерный массив и вычисляет сумму его элементов по столбцам, сумму его...

Двумерный массив - C++
Есть задача : Описанный в упражнении 9 подход нерационален, так как каждый из 10 массивов объявляется отдельно, с ...

Двумерный массив - C++
помогите доделать программу. нужно сдавать через 2 дня Написать программу, интегрирующую случайный двумерный массив из 0 и 1 с помощью...

двумерный массив - C++
Ввести двумерный массив А (5*2).Определить в нем сумму модулей отрицательный элементов. Язык С++.Помогите, пожалуйста.Нужно на экзамен.

Двумерный массив - C++
Такие простые вопросы: вот дан 2-мерный массив, и необходимо выполнять действия не над всеми эл-тами, а только над одной какой-то...

Двумерный Массив - C++
Всем привет Помогите решить написанную ниже задачу, надо написать ее на С#, желательно с коментариями к коду, и разбитую на маин и...

двумерный массив - C++
я создал двумерный массив и ввёл числа допустим 123 658 теперь хочу поменять число 2 на 9 используя индексы массива вот как...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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");
}
в векторе получиш каждое слово отдельно. если надо добавь еще разделителей
Yandex
Объявления
05.12.2010, 11:15     Текст и двумерный массив.
Ответ Создать тему
Опции темы

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