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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2010, 13:09   #1
JokerWCC
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 18
По умолчанию Палиндром

Нужно определить является ли строка палиндромом..... я разбил данную строку на два равных куски и одну конвентировал.... вывел их на экран - абсолютно идентичны, но сцупа ответ получается не правельный (при проверке strcmp).... подскажите в чем ошибка???
Заранее спасибо!

Программа:

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <math.h>
#include <stdlib.h>
#include<iostream.h>
#include <string.h>

//---------------------------------------------------------------------------

#pragma argsused
int main()
{
        int i,d,pr,r;
        char s[]="able was i ere i saw elba";
        d=strlen(s);
        pr=d%2;
        r=d;
        if (pr!=0) d-=1;
        d=d/2;
        char* k= new char[d];
        char* l=new char[d];
        for (i=0;i<d;i++)
        {k[i]=s[r-i-1];}
        for (i=0;i<d;i++)
        {l[i]=s[i];}
        for (i=0;i<d;i++)
        {cout << k[i];
        }
        cout << "\n";
        for (i=0;i<d;i++)
        {cout << l[i];
        }
        cout << "\n";
        if (strcmp(k,l)==0) cout << "palindrom";
        else cout << "ne palindrom";
        cout << "\n";
        system("pause");
        for (i=0; i>d; i++) delete [] k;
        for (i=0; i>d; i++) delete [] l;
        return 0;
}
//---------------------------------------------------------------------------

Последний раз редактировалось Stilet; 12.10.2010 в 13:42.
JokerWCC вне форума Ответить с цитированием
Старый 12.10.2010, 13:41   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А я бы так решал:
Код:
#include "stdafx.h"
#include <locale>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    char *s=new char[100],*c=new char[100];
    setlocale(LC_ALL,"russian");
    cin>>s;
    c=strdup(s);
    s=strrev(s);
    if(!strcmp(s,c)){cout<<"Палиндром";}else{cout<<"Неа";}
    getchar();getchar();
    delete[] s;
    delete[] c;
    return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.10.2010, 13:52   #3
JokerWCC
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 18
По умолчанию

спасибо, так получается))))
JokerWCC вне форума Ответить с цитированием
Старый 12.10.2010, 13:56   #4
Secc
Пользователь
 
Аватар для Secc
 
Регистрация: 19.10.2009
Сообщений: 30
По умолчанию

мой вариант
Код:
//---------------------------------------------------------------------------
#include <windows.h>
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
int main()
{
SetConsoleOutputCP(1251);
char ar1[100];
char ar2[100];
char buf[100];
cout<<"vvesti frazu \n";
cin.getline(ar1,100,'\n');   // вводим строку
int n,j,f,k;
n=strlen(ar1);  // длинна строки
//             удаляем пробелы
j=0;f=0;k=0;
while(k<n)
{

   if(ar1[k]==' ')
   {
     for(int j=k;j<n;j++)
     ar1[j]=ar1[j+1];
     n--;
     k--;
   }
   k++;

}
//          записываем первую строку с конца
  for(int i=n-1;i>=0;i--)
  {
       for(j=f;j<n;j++)
          {
           ar2[j]=ar1[i];
          }
          j=0;
          f++;
  }
//              сравниваем
int p;
p=strncmp(ar1,ar2,n); // функция сравнивает до n-ого эл., если равны то возвр.0
if(p==0) cout <<"is polindrom\n\n";
else cout<<"is not polindrom\n\n";
system("pause");

        return 0;
}
//---------------------------------------------------------------------------
Спасибо! Кэп!!
FORZA LAZIO e NON MOLLARE MAI !!
Secc вне форума Ответить с цитированием
Старый 12.10.2010, 15:02   #5
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

А на паскале так:
Код:
Uses CRT;
Var
     S:String;
     S1:String;
     I:Integer;
Begin
        Clrscr;
        Write('Enter word:');
        Readln(S);
        S1:='';
        For I:=Length(S) DownTo 1 Do
        S1:=S1+S[i];
        If S1 = S2 Then Write('Палиндром') Else Write('Не палиндром');
        Readln;
End.
_-Re@l-_ вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Палиндром A_Orlov Паскаль, Turbo Pascal, PascalABC.NET 1 27.04.2010 16:44
Палиндром shark2010 Помощь студентам 11 23.04.2010 03:07
Палиндром??? viva2222 Помощь студентам 6 21.03.2010 12:29
Палиндром. Паскаль. Nubas Помощь студентам 6 17.12.2009 21:23
Палиндром Carbon Помощь студентам 9 12.11.2007 14:32