Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > !!!HELP!!!


Автор: Doc_d0s 26.2.2005, 17:25
Я целую недел напрягал своё серое вещество smile , и так не могу написать ф-ию для:
1.Выделения слова из текста(!)
2.Удаления средней буквы в слове с нечётной длиной
3.Записать все в массив со знаками пунктуации-одним словом разделителями
вот, всё должно быть в одной ф-ии
есть ф-ия,я не могу понять почему...:
Код

void ChangeText(char *a)
{
char *chText=new char[strlen(a)+1];
char st[255],ch,*delimiters="~`!@#$%^&*()_-+=|\\   /,<.>\?\"\';:[]{}¹\t\n\0";
int k=-1,i=0;
for(i=0;i<strlen(a);i++)
{
 ch=a[i];
 if(strstr(delimiters,&ch)) //.....тут она не понимает пробел как символ!?
 {
  if(k!=-1)
  {
   k++;
   st[k]='\0';
   if(strlen(st)%2)
   {
    for(int j=((int)(strlen(st)/2)); j<(int)strlen(st);j++)
     st[j]=st[j+1];
   }
   st[strlen(st)]=ch;
   st[strlen(st)+1]='\0';
   strcpy(chText,st);
   k=-1;
  }
  else
  {
   strcpy(chText,&ch);
  }
 }
 else
 {
   k++;
   st[k]=ch;
 }

}
}


Памагите ПЛЗ!!!

Автор: chipset 26.2.2005, 18:44
Модератор: Название темы должно отражать ее суть!

Автор: Doc_d0s 26.2.2005, 21:07
Я конечно прошу прощения, но иначе в мою голову нчего кроме НЕLP не лезло smile

Автор: Goryachev 27.2.2005, 18:53
Короче работает.
Код

char* ChangeText(char* a)
{
char *chText=new char[strlen(a)+1];
char st[255],*start,*end;
char *delimiters="~`!@#$%^&*()_-+=|\\ /,<.>\?\"\';:[]{}?\t\n";
chText[0]='\0';
while (*a)
{
 start=a;
 for (;strchr(delimiters,*a)&&*a;a++);
 strncpy(st,start,a-start); //copy delimeters
 st[a-start]='\0';
 strcat(chText,st);         // adding delimeters
 start=a;
  for (;!strchr(delimiters,*a)&&*a;a++);
  strncpy(st,start,a-start); //copy word
  st[a-start]='\0';
  int len=strlen(st);
  if (len%2) //if the string is of odd size
  {
   start=st+len/2;
   for (;*start;start++) // removing the middle char
     *start=*(start+1);
  }
  strcat(chText,st); // adding appropriate word
}
return chText;
}



Только не забудь освободить память chText.

Автор: Doc_d0s 27.2.2005, 20:03
Всем большой пасиб, я уже написал программу сам smile Кому интересно вот код:
Код

#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define dataEr  printf("\t\t\t\t!!!ERROR!!! \n\n\t\tFILE IS EMPTY or no match symbolyc information!\n\n")
#define FileEr  printf("\t\t\t\t!!!ERROR!!! \n\n\t\tNo such fiLe or DirEctOry\n\n")
#define QUIT printf("\nDo you want to close this program?(y/n)\t"); if( getche()=='y' ) {printf("\n");exit(0);}

long filesize(char*s);
int EnterText(char*a,char *s);
void OutText(char *p);
void ChangeText(char*a);


int main()
{

while(1)
{
 system("cls");
 long a=filesize("C:\\f.dat");
 char *text=new char[a];
 if(EnterText(text,"C:\\f.dat")!=0)
 {
  OutText(text);
  getch();
  system("cls");
  ChangeText(text);
  delete [](text);
  QUIT;
 }
 else
  exit(0);
}
getch();
return 0;
}

long filesize(char*s)
{
 FILE*stream;
 long k=0;
  if((stream=fopen(s,"r"))!=NULL)
  {
 while(!feof(stream))
 {
  fgetc(stream);
  k++;
 }
 return k;
  }
  else
  {
   FileEr;
   return 0;
  }
 
}

int EnterText(char *a, char *s)
{
 FILE*f;
 long k;
 if((f=fopen(s,"r"))!=NULL)
 {
  if((k=(filesize(s)))==0)
   dataEr;
  fseek(f,0L,SEEK_SET);
  for(int i=0;!feof(f);i++)
  {
   a[i]=fgetc(f);
  }
  a[k-1]='\0';

 
  fclose(f);
 }
 else
 {
  FileEr;
  exit(0);
 }
 return 1;
}

void OutText(char *p)
{
printf("%s ",p);
}

void ChangeText(char *a)
{
char *delimiters=" ~`!@#$%^&*()_-+=|\\ /,<.>\?\"\';:[]{}¹\t\n\0";
char *str=new char [strlen(a)+1];
char *st=new char [strlen(a)+1];
char ch[2];
int k=-1;

str[0]='\0';
st[0]='\0';
ch[1]='\0';
for(int i=0; i<strlen(a); i++)
{
 ch[0]=a[i];
 if(strchr(delimiters,ch[0]))
 {
  if(k!=-1)
  {
   k++;
   str[k]='\0';
   if(strlen(str)%2)
   {
    for(int j=(int)strlen(str)/2;j<strlen(str)-1;j++)
     str[j]=str[j+1];
    str[k-1]=ch[0];
    str[k]='\0';
    strcat(st,str);
   }
   else
   {
    str[k]=ch[0];
    str[k+1]='\0';
    strcat(st,str);

   }
   k=-1;
   str[0]='\0';
  }
  else
  {
   strcat(st,ch);
  }

 }
 else
 {
  k++;
  str[k]=ch[0];
 }
}
OutText(st);
delete[](st);
delete[](str);
}


smile smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)