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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2009, 03:56   #11
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Цитата:
Сообщение от HoOpe Посмотреть сообщение
Задание:
Определить количество слов, поменять местами четные и нечетные слова.
Без комментариев.

Как говорится, добавлено 10 ч спустя:
Цитата:
Сообщение от Sazary Посмотреть сообщение
Просто цель задания - реализовать какой-то определенный алгоритм, используя определенные функции. Ведь это просто вузовская задачка...
И какие-то определенные слова! Видимо, вузовские.

(Я дальнейшее прочитал, и более-менее успокоился. Спасибо, Sazary!)

Последний раз редактировалось Sasha_Smirnov; 08.05.2009 в 13:56.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 08.05.2009, 11:07   #12
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
Без комментариев.
Нужно учитывать саму специфику таких заданий.
Например, если сказано, что нужно заполнить массив из файла, то имеется в виду, что числа там небольшие и стандартные типы способны их вместить. Иначе к любой задаче нужно было бы применять длинную арифметику или еще что-нибудь.

Повторюсь: это не реальный проект и докторскую на нем никто защищать не будет. Поэтому и условие нужно воспринимать соответствующе.

ps Можно также заметить, что про язык тоже ничего не сказано. И чтож теперь, допускать возможность, что текст будет на китайском?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 08.05.2009, 11:54   #13
HoOpe
Пользователь
 
Аватар для HoOpe
 
Регистрация: 09.03.2009
Сообщений: 52
По умолчанию

А почему, когда кампилируешь на экране нет текста, а только черный цвет и нет возврата обратно к напечатанной программе??
когда всё становится на свои места, выясняется, что это кладбище...
HoOpe вне форума Ответить с цитированием
Старый 08.05.2009, 11:59   #14
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от HoOpe Посмотреть сообщение
А почему, когда кампилируешь на экране нет текста, а только черный цвет и нет возврата обратно к напечатанной программе??
У меня все работает.
Вложения
Тип файла: rar test2.rar (5.2 Кб, 13 просмотров)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 09.05.2009, 10:02   #15
Nomlpppp
Пользователь
 
Регистрация: 26.02.2009
Сообщений: 51
По умолчанию

Код:
#include<stdio.h>
#include<string.h>
#include<conio.h>


#define MAX_WORD   20  // максималоьное количество слов в строке 20



typedef struct
 {
 unsigned char *word; // указатель на слово
 unsigned char token;  // символ ращделитель
 } TInfo;





/**
 Проверяет, является ли символ символом разделителем.
**/
int chk4delimiter( unsigned char symbol, unsigned char *delims )
 {
 int sign;

 for( sign=0; *delims; delims++ )
  {
  if( symbol==*delims )
   {
   sign = 1;
   break;
   }
  }
 return( sign );
 }




/**
 Ставит указатели на начала слов
**/
void tokenize( char *sbuffer, TInfo *gptr, char *delims, int *n )
 {
 int i, j;
 *n = 0;
 gptr[ (*n)++ ].word = sbuffer;

 int length = strlen( sbuffer );

 for( i=0; *n<MAX_WORD; i++ )
  {

  if( chk4delimiter(sbuffer[ i ], delims) )
   {
   gptr[ *n-1 ].token = sbuffer[ i ];
   sbuffer[ i ] = '\0';

   if( (i+1)<length )
    {
    gptr[ *n ].word = &sbuffer[ i+1 ];
    (*n)++; 
    }
   }

  if( i==length )
   {
   break;
   }
  }
 }












int main()
 {
 int i, j, sign, n;
 char buffer[ 1024 ], *p = &buffer[ 0 ], *ptr[ 2 ], *tmp, delimiters[]=" .,?:?!\n\t";

 FILE *Ifile; 

 Ifile = fopen( "Data.txt", "r" );

 if( !Ifile )
  {
  perror( "Data.txt" );
  return 0;
  }


 TInfo g[ MAX_WORD ], *gptr = &g[ 0 ];


 fseek( Ifile, 0L, SEEK_SET );



 for( n=0; fgets(p, 1024, Ifile); )
  {
  if( p[ strlen(p)-1 ] == '\n' ) p[ strlen(p)-1 ] = '\0'; else p[ strlen(p) ] = '\0';

  printf( "%s\n", p ); // оригинальная строка
  //getch();

  tokenize( p, gptr, delimiters, &n ); // ставим метки на начала слов


  for( i=0, j=0 ; i<n; i++, j++ )
   {
   if( j==1 )
    {
    //printf( "%s | %s\n", gptr[ i-1 ].word, gptr[ i ].word );

    tmp = gptr[ i-1 ].word;
    gptr[ i-1 ].word = gptr[ i ].word;
    gptr[ i ].word = tmp;

    //printf( "%s | %s\n", gptr[ i-1 ].word, gptr[ i ].word );
    //getch();

    j = -1;
    if( i==1 )  p = gptr[ 0 ].word;
    }
   }


  
  for( i=0, j=0 ; i<n; i++, j++ )
   {
   printf( "%s%c", gptr[ i ].word, gptr[ i ].token ); // вывод измененной строки
   } 

  printf( "\n" );
  getch();
  }


 return 0;
 }
Слегка усложненный вариант, но не совершенный, хотя может разбивать строку на слова по нескольким символам разделителям(задаются в переменной delimiters), но в случае стоящих подряд разделителей,например два пробела подряд, второй пробел считает словом.

Последний раз редактировалось Nomlpppp; 09.05.2009 в 12:38.
Nomlpppp вне форума Ответить с цитированием
Старый 11.05.2009, 01:53   #16
HoOpe
Пользователь
 
Аватар для HoOpe
 
Регистрация: 09.03.2009
Сообщений: 52
По умолчанию

Nomlpppp, а в коде ошибки Error.jpg

А можно ли в код
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>


int main(){
FILE *fin,*fout;
char wrd[3][100],c,*p;

fin = fopen("1.txt","r");
fout = fopen("2.txt","w");

strcpy(wrd[0],"");
strcpy(wrd[1],"");
strcpy(wrd[2],"");

while(!feof(fin))
 {
  c = fgetc(fin);
  if(feof(fin)) break;
  while(!feof(fin)&&!((c>='A'&&c<='Z')||(c>='a'&&c<='z')))
   {
    fputc(c,fout);
    c = fgetc(fin);
   }
  p = wrd[0];
  //*p++ = c;
  //---
  while(!feof(fin)&&((c>='A'&&c<='Z')||(c>='a'&&c<='z')))
   {
    *p++ = c;
    c = fgetc(fin);
   }
  *p=0;
  p = wrd[1];
  //*p++ = c;
  while(!feof(fin)&&!((c>='A'&&c<='Z')||(c>='a'&&c<='z')))
   {
    *p++ = c;
    c = fgetc(fin);
   }
   *p=0;
   p = wrd[2];
   //*p++ = c;
   while(!feof(fin)&&((c>='A'&&c<='Z')||(c>='a'&&c<='z')))
    {
     *p++ = c;
     c = fgetc(fin);
    }
  *p=0;
  fputs(wrd[2],fout);
  fputs(wrd[1],fout);
  fputs(wrd[0],fout);
  if(feof(fin)) break;
  fputc(c,fout);

 }

fclose(fin);
fclose(fout);

//getch();
return 0;
}
добавить функций, которые выводят текст, который был в файле 1.txt и который получился в 2.txt?? как это сделално в коде
Код:
#include<stdio.h>
#include<string.h>
#include<conio.h>

#define MAX_WORD   20  // максималоьное количество слов в строке 20

typedef struct
 {
 unsigned char *word; // указатель на слово
 unsigned char token;  // символ ращделитель
 } TInfo;

/**
 Проверяет, является ли символ символом разделителем.
**/
int chk4delimiter( unsigned char symbol, unsigned char *delims )
 {
 int sign;

 for( sign=0; *delims; delims++ )
  {
  if( symbol==*delims )
   {
   sign = 1;
   break;
   }
  }
 return( sign );
 }

/**
 Ставит указатели на начала слов
**/
void tokenize( char *sbuffer, TInfo *gptr, char *delims, int *n )
 {
 int i, j;
 *n = 0;
 gptr[ (*n)++ ].word = sbuffer;

 int length = strlen( sbuffer );

 for( i=0; *n<MAX_WORD; i++ )
  {

  if( chk4delimiter(sbuffer[ i ], delims) )
   {
   gptr[ *n-1 ].token = sbuffer[ i ];
   sbuffer[ i ] = '\0';

   if( (i+1)<length )
    {
    gptr[ *n ].word = &sbuffer[ i+1 ];
    (*n)++; 
    }
   }

  if( i==length )
   {
   break;
   }
  }
 }

int main()
 {
 int i, j, sign, n;
 char buffer[ 1024 ], *p = &buffer[ 0 ], *ptr[ 2 ], *tmp, delimiters[]=" .,?:?!\n\t";

 FILE *Ifile; 

 Ifile = fopen( "Data.txt", "r" );

 if( !Ifile )
  {
  perror( "Data.txt" );
  return 0;
  }

 TInfo g[ MAX_WORD ], *gptr = &g[ 0 ];

 fseek( Ifile, 0L, SEEK_SET );


 for( n=0; fgets(p, 1024, Ifile); )
  {
  if( p[ strlen(p)-1 ] == '\n' ) p[ strlen(p)-1 ] = '\0'; else p[ strlen(p) ] = '\0';

  printf( "%s\n", p ); // оригинальная строка

  tokenize( p, gptr, delimiters, &n ); // ставим метки на начала слов


  for( i=0, j=0 ; i<n; i++, j++ )
   {
   if( j==1 )
    {
  
    tmp = gptr[ i-1 ].word;
    gptr[ i-1 ].word = gptr[ i ].word;
    gptr[ i ].word = tmp;

    j = -1;
    if( i==1 )  p = gptr[ 0 ].word;
    }
   }

  for( i=0, j=0 ; i<n; i++, j++ )
   {
   printf( "%s%c", gptr[ i ].word, gptr[ i ].token ); // вывод измененной строки
   } 
  printf( "\n" );
  getch();
  }
 return 0;
 }
когда всё становится на свои места, выясняется, что это кладбище...
HoOpe вне форума Ответить с цитированием
Старый 11.05.2009, 02:12   #17
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от HoOpe
А можно ли в код .......
добавить функций, которые выводят текст, который был в файле 1.txt и который получился в 2.txt?? как это сделално в коде
Могли бы просто сказать "вывести текст на экран".

Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>


int main(){
FILE *fin,*fout;
char wrd[3][100],c,*p;

fin = fopen("1.txt","r");
fout = fopen("2.txt","w");

strcpy(wrd[0],"");
strcpy(wrd[1],"");
strcpy(wrd[2],"");

while(!feof(fin))
 {
  c = fgetc(fin);
  if(feof(fin)) break;
  while(!feof(fin)&&!((c>='A'&&c<='Z')||(c>='a'&&c<='z')))
   {
    fputc(c,fout);
    putc(c,stdout);
    c = fgetc(fin);
   }
  p = wrd[0];
  //*p++ = c;
  //---
  while(!feof(fin)&&((c>='A'&&c<='Z')||(c>='a'&&c<='z')))
   {
    *p++ = c;
    c = fgetc(fin);
   }
  *p=0;
  p = wrd[1];
  //*p++ = c;
  while(!feof(fin)&&!((c>='A'&&c<='Z')||(c>='a'&&c<='z')))
   {
    *p++ = c;
    c = fgetc(fin);
   }
   *p=0;
   p = wrd[2];
   //*p++ = c;
   while(!feof(fin)&&((c>='A'&&c<='Z')||(c>='a'&&c<='z')))
    {
     *p++ = c;
     c = fgetc(fin);
    }
  *p=0;
  fputs(wrd[2],fout);
  printf("%s",wrd[2]);
  fputs(wrd[1],fout);
  printf("%s",wrd[1]);
  fputs(wrd[0],fout);
  printf("%s",wrd[0]);
  if(feof(fin)) break;
  fputc(c,fout);
  putc(c,stdout);

 }

fclose(fin);
fclose(fout);

getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.05.2009, 02:24   #18
HoOpe
Пользователь
 
Аватар для HoOpe
 
Регистрация: 09.03.2009
Сообщений: 52
По умолчанию

а текст из начального файла??
когда всё становится на свои места, выясняется, что это кладбище...
HoOpe вне форума Ответить с цитированием
Старый 11.05.2009, 02:27   #19
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от HoOpe
а текст из начального файла??
Да. А вы разве сами не видите? Вы хоть разберитесь в коде-то.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.05.2009, 02:32   #20
HoOpe
Пользователь
 
Аватар для HoOpe
 
Регистрация: 09.03.2009
Сообщений: 52
По умолчанию

а компилятор показывает только текст файла 2...
когда всё становится на свои места, выясняется, что это кладбище...
HoOpe вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка строк в C++ defol-777 Помощь студентам 1 12.03.2009 18:10
обработка строк densan Общие вопросы Delphi 3 26.08.2008 11:11
обработка строк Xunter Помощь студентам 4 27.06.2008 21:48
Обработка строк символов Wilda Паскаль, Turbo Pascal, PascalABC.NET 3 12.12.2007 18:54