Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> палиндромы в строке, вывести все палиндромы из строки 
:(
    Опции темы
Zaulyx
  Дата 21.11.2008, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



помогите плз...вот мои наработки...

#include <stdio.h>
#include <stdlib.h>
Obrat( Int j, char st, str);
{
st=0;
for (j=length(str); 1; --j)
{
st=st+str[j];
return(st);
}
}
int main()
{
int i,j,n, m[i];
char s[i];

printf('vvedite stroky: ');
scanf("%s", &s);
n=1;
for (i=1; i=length(s); ++i)
if s[i]=0 then n= ++n;
else m[n]=m[n]+s[i];
for (i=1; i=n-1; ++i)
for (j=1; j=n; ++j)
if m[i]== Obrat(m[j]) then
printf(m[i]);
return(0);

    }

PM MAIL   Вверх
sQu1rr
Дата 21.11.2008, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 3
Всего: 13



Используйте тег код для вствки кода
Код

[ code=cpp ] [ /code ]

И напишите описание проблеммы, впрочем почитайте правило №1 во вредных советах в этом разделе ;)

Это сообщение отредактировал(а) sQu1rr - 21.11.2008, 22:07
PM MAIL Skype GTalk   Вверх
Zaulyx
Дата 21.11.2008, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



проблема состоит в том что не могу доработать код до рабочего состояния
PM MAIL   Вверх
taiven
Дата 21.11.2008, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 2
Всего: 9



Надо вывести на экран слова типа "шалаш", "казак" и т.д.?
PM   Вверх
sQu1rr
Дата 21.11.2008, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 3
Всего: 13



Я думал, что вы оделитесь со мной секретом: что же на самом деле делает программа и какнибудь отреагируете на мой комментарий и отредактируете первое сообщение (вставете код в тег КОД)

Ладно приступлю к описанию проблем:

Int писать с большой буквы гениально - С++ чувствителен к регистру, так что следите за написанием

Obrat - О, брат, что это за функции не имеющея возвратного типа.
 - в ней же. В цикле последний метод - return - тогда объясните какой смысл в цикле  smile 
 - там же. Функция получает char st - зачем же ее обнулять, да к тому же не правильно - испоьзуйте static_cast<char>(0)
 - очень странные атрибуты функции

Вообщем дальше могу не проверять, так посмотрел. Думаю, что вы даже не читали С++ за 24 часа - очень советую. Ваш язык не сильно похож на С++, а где похож, там не имеет никакого смысла

Хочу сказать, что меня СИЛЬНО УБИЛО:
Код

if m[i]== Obrat(m[j]) then
printf(m[i]);

PM MAIL Skype GTalk   Вверх
Zaulyx
Дата 21.11.2008, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



Код

#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
struct item
{
   int data;
   item *next;
};

class OcheredPusta
{

};

class BadIndex
{

};

class Ochered
{
      friend ostream&/* возвращается адрес*/ operator<<(ostream&, const Ochered&);
      friend Ochered& operator<<(int&, Ochered&);
   private:
      item *first, *end;
   public:
      Ochered();
      Ochered(const Ochered&);
      ~/*деструктор*/Ochered();

      Ochered& operator<<(int); /*объект класса. параметр*/
      void Clear();
};

struct TNode
{
   Ochered *data;
   TNode *next;
};

class OcheredList
{
   private:
      TNode *first;
   public:
      OcheredList(){first=NULL;}
      Ochered& operator[]/*операция индексации*/(int no);/*с объектами этогго класса можно обращаться как с массивом*/
      ~OcheredList();
};

Ochered::/*операция разрешения области действия*/Ochered()
{
   first=NULL;
   end=NULL;
}

Ochered::Ochered(const Ochered& r)/*r ссылка на объект копию которого мы создаем*/
{
   item *p1, *p2=r.first;
   first=NULL;
   end=NULL;

   while(p2)
   {
      p1=new item; /*создаем новый элемент очереди*/
      p1->data=p2->data;

      if(first)
         end->next=p1;
      else
         first=p1;

      end=p1;
      p2=p2->next;
   }
}

Ochered::~Ochered()
{
   Clear();
}

void Ochered::Clear()
{
   item *p;

   while(first)
   {
      p=first->next;
      delete first; /*удаление 1го элемента*/
      first=p;
   }

   end=NULL;
}

Ochered& Ochered::operator<<(int x) /*помещение элемента в очередь. перегрузка оператора сдвига*/
{
   item *p=new item;
   p->data=x;
   p->next=NULL;
   if(first)
      end->next=p;
   else
      first=p;

   end=p;
   return *this;/*this это указатель на тот объект для которого вызвана функция элемента*/
}

Ochered& operator<<(int &x, Ochered &Och)/*глобальная фуункция поместить в поток. нет никаких двоеточий*/
{
   item *p=Och.first;

   if(p)
   {
      x=p->data;
      Och.first=Och.first->next;
      delete p;
   }
   else
      throw OcheredPusta();/*генерируем исключение типа очередь пуста*/

   return Och;
}

ostream& operator<<(ostream& os, const Ochered& Och) /*перегрузка операции поместить в поток(вывод)*/
{
   item *p=Och.first;

   if(p==NULL)
      os << "Ochered pusta\n";
   else
      while(p)
      {
         os << p->data << "\n";
         p=p->next;
      }

   return os;
}

OcheredList::~OcheredList()/*деструктор класса списка очередей*/
{
   TNode *p;

   while(first)
   {
      p=first->next;
      delete first->data;
      delete first;
      first=p;
   }
}

Ochered& OcheredList::operator[](int no) /*перегрузка операции индексации*/
{
   if(no < 1)
      throw BadIndex();/*генерируем исключение если неправильный номер*/

   TNode *p=first;
   if(p==NULL)
       {
        p=new TNode;
        p->data = new Ochered;
        p->next=NULL;
        first=p;
       }
       while(no>1 && p->next!=NULL) // элемент на который указывает указатель р не последний указатель на след элемент и он не последний
       {
        no--;
        p=p->next;
       }

       if(no>1)
       {
       while(no>1)
       {
        p->next=new TNode;// еслии у нас нет очереди с нужным нам номером мы досоздаем очереди
        p=p->next;
        p->data = new Ochered;
        no--;
       }
       p->next=NULL;
       }
       return *p->data;
}

OcheredList Ocheredes;

int main()
{
bool done = false;
char c;
int cur=1, x;

while (!done)
{
        cout << "\n\nAdd.................(A)\nClear...............(C)\nDelete_Element......(D)\nDisplay.............(S)\nQuit................(Q)\n";
        cin >> c;
        c = toupper(c);
        if(c!='Q')
        {
        cout << "\n\nCurrent queue number is " << cur << "\nEnrer digit to select queue";
        cin >> cur;
        }
        try{ /*отлавливание исключений*/
        switch(toupper(c))
        {
           case 'A':
              cout << "x=";
              cin >> x;
              Ocheredes[cur]<<x;/*получаем ссылку на интересующую нас очередь и помещаем туда икс*/
              cout << Ocheredes[cur];/*интересующую нас очередь выводим в поток*/
              system("Pause");
              break;
           case 'C':
              Ocheredes[cur].Clear();/*вызываем метод Клеар для интересующей нас очереди*/
              cout << "Ochered ochichena";
              system("Pause");
              break;
           case 'D':
              x << Ocheredes[cur]; /*извлекаем икс*/
              cout << "deleted = " << x << "\n";
              cout << Ocheredes[cur];
              system("Pause");
              break;
           case 'S':
              cout << Ocheredes[cur];
              system("Pause");
              break;
           case 'Q':
              done = true;
        }
        }
        catch(BadIndex)/*ловим исключение класса бэдиндекс*/
        {
           cout << "Index must be more zero\n";
           system("Pause");
        }
        catch(OcheredPusta)
        {
           cout << "Impossible to remove element from empty queue\n";
           system("Pause");
        }
}
cout << "\n";

return 0;
}


Это сообщение отредактировал(а) Zaulyx - 6.1.2009, 08:03
PM MAIL   Вверх
taiven
Дата 21.11.2008, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 2
Всего: 9



Код

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <conio.h>
#include <locale.h>

int check(char *str)
{
    int n = 0, m = strlen(str)-1;
    while(n < m)
        if(str[n++]!=str[m--]) return 0;
    return 1;
}
int main()
{
    char *str = "шалаш стол алла стул картошка смс кирпич казак";
    char array[30] = {0};
    int i = 0;
    setlocale(LC_CTYPE, "Russian");

    do{
        if(isalnum(*str))  
        {
            while(*str!=' ')
            {
                if(!*str) break;
                if(!ispunct(*str)) array[i++] = *str;
                *str++;
            }
            i = 0;
            *str--;

            if(check(array)) printf("%s\n", array);
            memset(array, '\0', 30);
        }
    }while(*str++);

    _getch();
    return 0;
}


Вот на Си. Если для русских слов не работает, тогда setlocale можно убрать...
PM   Вверх
Zaulyx
Дата 22.11.2008, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



чтобы строка вводилась пользователем нужно написать

 printf('vvedite stroky: '); 
 scanf("%s", &str); 

??
PM MAIL   Вверх
taiven
Дата 22.11.2008, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 2
Всего: 9



Код

char str[256];
//...
printf('vvedite stroky: '); 
gets(str); 


PM   Вверх
destrd
Дата 22.11.2008, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 1.10.2008

Репутация: нет
Всего: 4



Ищите по форуму, я уже писал код для определения полиндрома, и думаю, не я один.
--------------------
Some people, when confronted with a problem, think, "I known, I'll use regular expressions." Now they have two problems.        -- Jamie Zawinski in comp.lang.emacs
PM MAIL ICQ   Вверх
Zaulyx
Дата 23.11.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



2taiven
а можно написать без включения доп библиотек только используя 
include <stdio.h>
#include <stdlib.h>
?
PM MAIL   Вверх
taiven
Дата 23.11.2008, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 2
Всего: 9



можно в принципе, а что?
PM   Вверх
Zaulyx
Дата 23.11.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



просто мы пока не проходили библиотеки и пока юзаем только эти
PM MAIL   Вверх
Kallikanzarid
Дата 23.11.2008, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: 2
Всего: 3



Zaulyx, код выше написан только с использованием стандартной библиотеки. Полный список ее заголовочных файлов можно взять в инете.
PM MAIL   Вверх
taiven
Дата 23.11.2008, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 2
Всего: 9



незнаю, что это получилось, но вот)
Код

#include <stdio.h>
#include <stdlib.h>

int check(char *str)
{
    int n = 0, m = -1;
    char *p = str;
    while(*p++) m++; 
    if(n == m) return 0;
    while(n < m) 
        if(str[n++]!=str[m--]) return 0;

    return 1;
}
int main()
{
    char str[256] = {0};
    char temp[30] = {0};
    char *p;
    int i = 0;

    printf("%s\n", "Input string:");
    gets(str);

    p = str;

    do{
        if((*p >= 'A'  && *p <= 'Z') || (*p >= 'a' && *p <= 'z'))  
        {
            while(*p!=' ')
            {
                if(!*p) break;
                if((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z')) 
                    temp[i++] = *p;
                *p++;
            }
            i = 0;
            *p--;
            
            if(check(temp)) printf("%s\n", temp);
            for(int n = 0; n < 30; ++n) temp[n] = '\0';
        }
    }while(*p++);
    
    system("pause");

    return 0;
}



Это сообщение отредактировал(а) taiven - 23.11.2008, 19:47
PM   Вверх
Zaulyx
Дата 23.11.2008, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



 спасибо а зачем мы в 38 строчке отнимаем от p ??
PM MAIL   Вверх
taiven
Дата 23.11.2008, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 2
Всего: 9



похоже, что это я просто перемудрил, наверное можно убрать  smile 
PM   Вверх
Zaulyx
Дата 23.11.2008, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



но прога работает все ОК  smile 
PM MAIL   Вверх
Zaulyx
Дата 23.11.2008, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



  if(!*p) break;
                
  while(*p++);

а что значат эти 2 строки?
последняя означает пока не конец строки?
PM MAIL   Вверх
taiven
Дата 23.11.2008, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 2
Всего: 9



Цитата

последняя означает пока не конец строки?  

 smile 

Это сообщение отредактировал(а) taiven - 23.11.2008, 21:51
PM   Вверх
Zaulyx
Дата 23.11.2008, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



а первая?
PM MAIL   Вверх
taiven
Дата 23.11.2008, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 2
Всего: 9



Цитата

а первая? 

проверка, или не достигнут конец строки... но что-то мне подсказывает, что это я не совсем правильно сделал) лучше это убрать, а цикл while сделать таким:
Код

while(*p!=' ' && *p)



Это сообщение отредактировал(а) taiven - 23.11.2008, 22:11
PM   Вверх
Zaulyx
Дата 24.11.2008, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



Код

#include <stdio.h>
#include <stdlib.h>

int check(char *str)
{
    int n = 0, m = -1;
    char *p = str;
    while(*p++) m++;
    if(n == m) return 0;
    while(n < m)
        if(str[n++]!=str[m--]) return 0;

    return 1;
}
int main()
{
    char str[256] = {0};
    char temp[256] = {0};
    char *p;
    int i = 0;
    int n;
    printf("%s\n", "Input string:");
    gets(str);

    p = str;

    do{
        if((*p >= 'A'  && *p <= 'Z') || (*p >= 'a' && *p <= 'z'))
        {
            while( (*p!=',' && *p!=' ')  && *p)
            {
                if((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z'))
                temp[i++] = *p;
                *p++;
            }
            i = 0;

            if(check(temp)) printf("%s\n", temp);
            for(n = 0; n < 256; ++n) temp[n] = '\0';
        }
    }while(*p++);

    return 0;

}


вот подверг небольшим доработкам но как сделать так чтобы один символ был палиндромом? т.е вбиваем А и он является палиндромом???
PM MAIL   Вверх
taiven
Дата 24.11.2008, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 2
Всего: 9



Цитата

но как сделать так чтобы один символ был палиндромом?

нужно убрать строку
Код

if(n == m) return 0;

из функции check
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.6272 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.