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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2010, 00:00   #1
Zelenyi
 
Регистрация: 24.05.2010
Сообщений: 9
По умолчанию Файл, работа с текстом

Уважаемые программисты, помогите мне исправить ошибки в программе. написал программу а она не запускается, синтаксических ошибок нет. Сама программа должна считывать строки из файла в которых записаны слова через пробел и сортировать их, и записать окончательный результат в файл. Вот мой "шедевр":
Код:
#include<stdio.h>
#include<string.h>
#include<conio.h>
 char String[300];
 int Words[150];
 int Number;

int main()
    {
      int i,j,temp;
      int eoword;
    FILE *in,*out;
      in=fopen("MY_TEXT.txt","r");
      out=fopen("NEW_TEXT.txt","w");
      while((String[i]=fgetc(in))!=EOF)
       {
        fprintf(in,"%s");
        getch();
       }
        for (Number=0,eoword=1,i=0;String[i];i++)
        {
         if (String[i]==' ')
           {
             String[i]=0;
             eoword=1;
           }
          else
              if (eoword)
                {
                 Words[Number++]=i;
                 eoword=0;
                }
        }
       for (j=Number-1; j>0; j--)
          for(i=0; i<j; i++)
            if (strcmp(&String[Words[i]], &String[Words[i+1]])>0)
             {
              temp=Words[i];
              Words[i]=Words[i+1];
              Words[i+1]=temp;
             }
        for (i=0; i<Number;i++)
          printf("%s\n", &String[Words[i]]);
       fclose(in);
        fputs(String, out);
        fclose(out);
   return 0;
    }
Zelenyi вне форума Ответить с цитированием
Старый 25.05.2010, 00:13   #2
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Вот способ попроще
Код:
#include <algorithm>
#include <vector>
#include <string>
#include <fstream>

using namespace std;

int main()
{
	ifstream fin("MY_TEXT.txt");
	ofstream fout("MY_TEXT.txt");
	vector<string>data;
	string s;
	while(fin >> s)
		data.push_back(s);
	sort(data.begin(), data.end());
	for(int i = 0; i < data.size(); i++)
		fout << data[i] << " ";
	return 0;
}
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 25.05.2010, 00:21   #3
Zelenyi
 
Регистрация: 24.05.2010
Сообщений: 9
По умолчанию

это как я понимаю реализация на С++ а мне нужно на С и без структур
Zelenyi вне форума Ответить с цитированием
Старый 25.05.2010, 00:26   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
#include<string.h>
ну это в вашем коде точно не С
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.05.2010, 00:28   #5
Zelenyi
 
Регистрация: 24.05.2010
Сообщений: 9
По умолчанию

я понимаю нам впаривают что мы программируем на С, а сами пишем проги в С++3.1, но для нас это должно быть "как бы" С

Последний раз редактировалось Zelenyi; 25.05.2010 в 00:34.
Zelenyi вне форума Ответить с цитированием
Старый 25.05.2010, 01:34   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Код:
#include<string.h>
ну это в вашем коде точно не С
Вообще-то как раз это C ) У C++ называется string (без .h)

2Zelenyi, Вот, можно например так, не верх совершенства, но лучше ничего сейчас не придумаю - хочу спать )
Код:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

char* sortwords(char* words);

int main()
{ 
	char linebuf[80];
	FILE* in  = fopen("MY_TEXT.txt", "r");
	FILE* out = fopen("NEW_TEXT.txt", "w");

	if ( !(in && out) ) {
		fputs("An error occured - one of the files is not open\n", stderr);
		return 1;
	}

	// get the string
	fgets(linebuf, 80, in);

	// write sorted string
	fputs(sortwords(linebuf), out);

	return 0;
}

char* sortwords(char* words)
{
	int    i, j, k;
	int    wordscount;
	char** wordslist;
	char*  tmp;

	for(wordscount = 0, i = 0; words[i] != '\0'; i++)
		if (words[i] == ' ')
			wordscount++;
	wordscount++;

	wordslist = (char**)malloc(wordscount * sizeof(char*));
	for(i = 0; i < wordscount; i++)
		wordslist[i] = (char*)malloc(20);

 	for(i = 0, j = 0, k = 0; words[i] != '\0'; i++) {
		if (words[i] == ' ') {
			strncpy(wordslist[k], &words[j], i - j);
			wordslist[k][i-j] = '\0';
			j = i+1;
			k++;
		} else if (words[i+1] == '\0') {
			strcpy(wordslist[k], &words[j]);
			wordslist[k][i-j] = '\0';
		}
	}

	for(i = 0; i < wordscount - 1; i++)
		for(j = i + 1; j < wordscount; j++)
			if ( strcmp(wordslist[i], wordslist[j]) > 0 ) {
				tmp = wordslist[i];
				wordslist[i] = wordslist[j];
				wordslist[j] = tmp;
			}

	for(i = 0, k = 0; i < wordscount; i++, k++) {
		for(j = 0; wordslist[i][j] != '\0'; j++, k++)
			words[k] = wordslist[i][j];
		words[k] = ' ';
	}

	for(i = 0; i < wordscount; i++)
		free(wordslist[i]);
	free(wordslist);

	return words;
}
netrino вне форума Ответить с цитированием
Старый 25.05.2010, 10:47   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

да вы правы, ошибся вчера
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстом на PHP (или можно bat файл) gamer123 Помощь студентам 2 11.02.2010 18:34
Работа с текстом cinik Помощь студентам 1 22.01.2010 21:48
Работа с текстом С++ Verwolf Помощь студентам 4 02.11.2009 17:18
Работа с текстом!!! elf80 Microsoft Office Excel 2 24.09.2009 09:54
Работа с текстом fakir9999 Общие вопросы Delphi 3 04.06.2009 16:28