Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Strtok - написать


Автор: Domen 22.11.2009, 20:14
Доброго времени суток!
Программа ищет симметричные слова. Не могу написать Strtok.
Нужна помощь! smile 
Код

#include <stdio.h>

int SimSlovo( char *Slovo);//prototip
int strlen(char *s);
char *strtk(char *s,char *fed);

int strlen(char *s)
{
 int n=0;
 while (s[n])
 n++;
 return n;
}

char *strtk(char *s)
{    

  while(*s)
    {
       if(*s!=' ')
       {
       return ; 
       }
    }
}


int SimSlovo( char* Slovo)//function
{
 int i=0,j=0;
 j=strlen(Slovo)-1; //prisvoenie indeksa poslednei bukvi
 for (i=0;i<=j;i++,j--) //chitaem slovo s dvuh storon 
  {                    //do vstrechi 
   if (Slovo[i]!=Slovo[j]) return 1; //ne ravno znachit 0
  }
 return 0;//ravno 1
}

int main()
{
 char *input;//stroka sodergachaia simvoli
 char *deltel=" ,"; //simvol ogranichiteli
 char strok[1000];
 char edel;
 int  len;
 int  pos;
 input=strok;
 gets(strok);
 len=strlen(input); //opredeliaem dlinu stroki (eto budet konec stroki)
 pos=0; //nachalo stroki

 while(len>pos)
 {
  input = strtk(input);//nahodim simvol ' ,' v input
  pos=pos+strlen(input)+1;      //i berem ukazatel na sleduiuschii simvol
   //pozicia zaverscheniia
   printf(input);
  if(*input ) //esli v stroke schtoto esti
   {
    if ( SimSlovo(input)==1) //poluchaem resultat function
     {
      printf(" ");
      printf(input); //vivodim naidenii
     }
    input+=strlen(input)+1;
    /*perehodim k sleduiuchemu slovu i zaverschaem
    proverku prediduchego */
   }
 }
 return 0;
}

Автор: 586 22.11.2009, 20:45
Цитата(Domen @  22.11.2009,  20:14 Найти цитируемый пост)
Не могу написать Strtok.

Это задание такое? Есть же уже готовый strtok.

Автор: mes 22.11.2009, 20:49
вроде так : (исправлено)
Код

bool strhas (const char * str, char c)
{
    for (;*str; ++str)
        if (*str == c) return true;
    return false;
}
char *strtok (char * str, const char * tokens)
{
    static char * ptr = NULL;

    if (str) ptr = str;

    if (!ptr) return NULL;

    for (*ptr; ++ptr)
       if (!strhas (tokens, *ptr)) break;

    for (char *p = ptr; *ptr; ++ptr)
        for (const char *tk = tokens; *tk; ++tk)
        if (*ptr == *tk)
        {
            *ptr++ = 0;
            return p;
        }
    return NULL;
}

тестируйте..  smile 


Автор: Domen 22.11.2009, 21:25
Цитата

Это задание такое? Есть же уже готовый strtok. 

Готовой нельзя пользоваться.Нужно написать самому.

Автор: mes 22.11.2009, 22:02
ориентировался на это описание http://www.opengroup.org/onlinepubs/007908775/xsh/strtok.html

Автор: Domen 22.11.2009, 22:16
Нет.Не ориентировался. Логически вышло при тестировании.

Автор: mes 22.11.2009, 22:46
Цитата(Domen @  22.11.2009,  21:16 Найти цитируемый пост)
Нет.Не ориентировался. Логически вышло при тестировании. 

 smile Проверил - действительно выдает разный со стандартной функцией результат.
После исправления вроде стало давать аналогичный.
Отредактировал код в предыдущем посту.

Автор: Domen 22.11.2009, 23:22
Замечательно! smile Огромное спасибо!

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