Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2009, 02:21   #1
pavel_1406
Новичок
Джуниор
 
Регистрация: 19.12.2009
Сообщений: 2
Вопрос разбить текстовый файл на слова

Привет всем. У меня вопрос, как разбить текстовый файл так, чтобы после считывания, и при последующей обработке он представлял собой двухмерный массив из слов? Я так понял, это не так просто... ведь в каждой строке может быть разное количество слов, и соответственно разное количество элементов в строке...
Я тут пытался что то написать:
Код:
#include <stdio.h>
#include <string.h>
#include <cstdlib>



main()
{
FILE *f;
char s[100], b[50];
int i, j, k, m;
char *a[50][50];
f=fopen("c:\\text.txt", "rt");
if (f == 0) printf("fail ne naiden");
for(i=0; fgets(s,100,f) != 0; i++)
 {
 j=0;
 for(k=0; s[k] != ('\n' || '\0'); k++)
 m=0;
 {if( s[k] != ' ')
  {b[m]=s[k];
   m=m+1;
  }
  else
  {a[i][j]=b;
   j=j+1;
   for(m=0; b[m] != '\0'; m++)
   {b[m]= '*';}
  }
 }
 }
 
 
for(i=0; a[i][j] != NULL; i++)
 {for(j=0; a[i][j] != NULL; j++)
  {printf("%s ' '", a[i][j]);}
  printf("\n");
 }
system("pause");
EXIT_SUCCESS;

}
в результате, при попытке вывода этого массива, на экране ничего нет... Подскажите как все таки можно представить текст в виде массива из слов, и возможно ли это?


p.s. компилятор devc++

ну хоть кто нибудь помогите! буду рад любым идеям

Последний раз редактировалось pavel_1406; 19.12.2009 в 15:13.
pavel_1406 вне форума Ответить с цитированием
Старый 19.12.2009, 20:20   #2
Wicort
Форумчанин
 
Аватар для Wicort
 
Регистрация: 04.08.2009
Сообщений: 684
По умолчанию

Вот пример, писал давно, когда начинал С изучать (именно С, а не С++) Покопайся, вдруг поможет. Предупреждаю, что код писал не в "промышленных" масштабах, так что нужно доработать.

Задание.
Консольное приложение.
Считывает с диска текстовый файл.
В файле обычный текст.
Нужно построить частотный словарь слов. Т.е. какое слово сколько раз и где (строка, позиция в строке) встречается.
Кроме того, нужно предоставить пользователю возможность после анализа вводить слова и выводить информацию о том сколько раз и где оно встречается.


Код:
//---------------------------------------------------------------------------

#include <stdio.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused

struct Word
{
  char word[100];
  int line, position;
};

struct Word tarrWords[1000];

void parseString(const char *str, const int line, int *wNum)
/*разбираем строку на слова*/
{
  int pos = 0;
  int i = 0;
  tarrWords[*wNum].position = pos+1;
  tarrWords[*wNum].line = line;
  for (pos = 0; pos < strlen(str); pos++)  // бежим по строке
  {
	if ((str[pos] != ' ')&&(str[pos] != '\n')) // если символ не является пробелом
	{
	  if (ispunct(str[pos]) == 0) // и знаком препинания
	  {
		tarrWords[*wNum].word[i] = toupper(str[pos]); // то в верхний регистр и запоминаем
		i++;
	  }
	  
	} 
	else // если пробел, то слово записано
	{
	  i = 0;
	  (*wNum)++;
      tarrWords[*wNum].position = pos+2;
	  tarrWords[*wNum].line = line;
	}
  }
  (*wNum)++;

}

void toUp(char *str)
/*переводит слово в верхний регистр*/
{
  int i = 0;
  while (str[i] != '\0')
  {
	  str[i] = toupper(str[i]);
	  i++;
  }
}

int main(int argc, char* argv[])
{
  FILE *f;
  int line = 0, symbol = 0, wordNum = 0, i = 0, count = 0;
  char str[1000], word[100];

  // пытаемся открыть файл для чтения
  if ((f = fopen("c:/111.txt","r")) == NULL)
  {
	printf("%s","File not open");
	return 1;
  }
  // выводим содержимое файла
  while (!feof(f))
  {
	line++;
	fgets(str, 1000, f); // получаем из файла строку
	parseString(str,line,&wordNum);// разделяем на слова и запоминаем информацию
  }

  fclose(f);
  // обработка ввода пользователя
  printf("%s\n","Give me a word, please");
  gets(&word); // считываем слово
  toUp(word);
  for (i = 0; i<=wordNum; i++) // бежим по массиву
  {
	if (strcmp(tarrWords[i].word, word)==0) // сравниваем 
	{
	  printf("%s %d %s %d\n","line",tarrWords[i].line,"position",tarrWords[i].position);
	  count++;
	}
  }
  printf("%s %d\n","count",count);

  getchar();
  return 0;
}
//---------------------------------------------------------------------------
Еслия Вам помог, не поленитесь нажать на весы и оставить отзыв. Это не займет много времени, но даст понять, что я старался не зря =)
Мой ник зарегистрирован, а твой?
Wicort вне форума Ответить с цитированием
Старый 19.12.2009, 21:50   #3
pavel_1406
Новичок
Джуниор
 
Регистрация: 19.12.2009
Сообщений: 2
По умолчанию

Спасибо, это впринципе то что мне нужно было)) только один вопрос, как быть с переносом?? ведь если одна часть слова на одной строке, а другая часть, на второй строке, это же одно слово, а по этому алгоритму ( поправте если я не прав) это будут 2 разных слова...
pavel_1406 вне форума Ответить с цитированием
Старый 19.12.2009, 22:11   #4
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
По умолчанию

Когда ты получаешь строку из фала и разбиваешь её на слова делай проверку не является ли последний символ строки знаком "-" если является, то объединяешь последнее слова с первым словом следующей строки..
Nitrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как текстовый файл в формате word 2007 переделать в файл в формате ZAY JULIA Microsoft Office Word 13 09.06.2010 19:43
Текстовый файл _Smoke_ Паскаль, Turbo Pascal, PascalABC.NET 0 27.05.2009 13:25
Разбить exe файл Alex Cones Мультимедиа в Delphi 9 18.04.2009 21:18
Разбить файл на 4 части borzoni Паскаль, Turbo Pascal, PascalABC.NET 7 31.05.2008 10:51
Текстовый файл в текстовый массив Kimimaru Общие вопросы C/C++ 1 02.12.2007 11:55