ورود

نسخه کامل مشاهده نسخه کامل : تشخیص palindrome



dadafarid
29-12-2007, 00:29
سلام بر همگی
غدير خم و ولادت عيسي بن مريم برهمه بني آدميان مبارك باد.....
دوستان من یه برنامه ای میخوام که تشخیص بده ، کلمه ی وارد شده palindrome است یا نه ؟! (palindrome یعنی کلمه هایی مثل گرگ ، کیک ، kavak و...) البته نتونستم بنویسم ، البته چند موردی رو پیدا کردم که با function نوتشته شدن ، کارم میکنن ، ایرادی ندارن انا رو هم میذارم شاید به درد کسی بخوره !:
#include<stdio.h>
#include<ctype.h>
#include<string.h>

int isPalindrome( char *s );

int main ( void )
{
int i = 0;
int ch;
char s[100];

while ((ch = getchar()) != '\n') {
if (isalpha(ch)) {
s[i] = ch;
i++;
}
}

if ( isPalindrome(s) == 1) {
printf("Yes, is a palindrome.\n");
} else {
printf("No, not a palindrome.\n");
}

return 0;

}

int isPalindrome( char *s )
{
int i = strlen(s)-1;
int j = 0;

while (j<=i) {
if(s[j] != s[i]) {
return 0;
}
i--;
j++;
}
return 1;
}

اینم دومی :

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

char palindrome(char *,int,int);

main(){

char x[50],y[50]; /*I wrote it without using any functions I wasn't previously familiar with*/

int i=0,j,r=0,k,len; /*will try to use the functions when I find time*/

printf("Type your string\n");

gets(x);

len=strlen(x);

for (j=0;j<len;j++){

if (x[j]>='A' && x[j]<='Z') /*turning caps into lowercase*/

y[r++]=x[j]-('A'-'a'); /*making new string stripped of everything but letters*/

if (x[j]>='a' && x[j]<='z') /*did this to simplify slightly, my task wasn't worded very clearly anyway*/

y[r++]=x[j];

}

k=r-1;

if (palindrome (y,i,k)==1)

printf("You've got yourself a palindrome\n");

else if (palindrome (y,i,k)==0) printf ("Not a palindrome\n");

getchar();

} /*Works perfectly. Overall, a combination of everything you guys suggested*/

char palindrome(char a[],int i,int k){

if (i>=k) return 1;

else if (a[i]!=a[k]) return 0;

else if (a[i]==a[k]) return palindrome(a,i+1,k-1);

else return 0;

}
ولی من بدون تابع میخوام .... لطفا راهنمایی کنین
با سپاس........

sherlockholmz
30-12-2007, 08:22
سلام،
يك راهنمائي مي كنم اگر توانستيد برنامه را بنويسيد كه فبها اگر نشد يك كاري مي كنيم.
يك روش يافتن چنين كلماتي مقايسه آنه با معكوسشان است. بدين ترتيب كه كلمه راذخيره مي كنيم،سپس معكوسش را در جاي ديگر و آندو را با هم مقايسه مي كنيم.اگر يكسان بود آن كلمه بقول شما palindrome است.
موفق باشيد.

soda_india
09-01-2008, 17:55
سلام،
يك راهنمائي مي كنم اگر توانستيد برنامه را بنويسيد كه فبها اگر نشد يك كاري مي كنيم.
يك روش يافتن چنين كلماتي مقايسه آنه با معكوسشان است. بدين ترتيب كه كلمه راذخيره مي كنيم،سپس معكوسش را در جاي ديگر و آندو را با هم مقايسه مي كنيم.اگر يكسان بود آن كلمه بقول شما palindrome است.
موفق باشيد.
hoomanet_2000@yahoo.com salam lotfan mano add konid man neveshtam baraton scan mikonam miferestan baraton

asire-dell
14-01-2008, 20:06
شما مي تونيد با کمک يک آرايه اين برنامه رو بنويسيد.
بايد يک کاراکتر از اول آرايه بخونيد يکي از اخر . همينطور که يکي يکي از اول به آرايه اضافه مي کنيد بايد يکي يکي از اخر آرايه کم کنيد.
بعد با هم مقايسه کنيد.
و همينطوري به سمت وسط کلمه يا جمله حرکت کنيد.
اگر طرف راست و چپ با هم برابر بود آرايه شما پاليندرام يا متقارن هستش.

اميدوارم تونسته باشم کمکتون کنم.

soda_india
17-01-2008, 23:38
#include<stdio.h>
#include<string.h>
main()
{
char *ptr;
char strl[15],strl[15];
int i,j,l,flag=0,ans=0;
system("clear");
printf("Enter the string to check it is palindrome or not ?");
scanf("%s",strl);
for(i=0;strl[i]!='\0';i++)
ans++;
ptr=strl;
for(i=0,j=ans-1;strl[i]!='\0';i++,j--);
{

strl[i]=strl[j];
}
for(i=0;strl[i]!='\0';i++);
{
if(strl[i]!=strl[i])
{
flag=1;
break;
}
}
if(flag==1)
printf("\a The entered string is not palindrome ");
else if (flag==0)
printf("the entered string is palindrome ");
printf("\n");
}

dadafarid
18-01-2008, 00:57
سلام ... خیلی ممنون از لطف همه دوستان ...
آقای soda_india ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) خیلی ممنون ... شرمنده کردید....

dadafarid
18-01-2008, 01:33
دوست عزیز برنامه ایراد داره !!!!

soda_india
18-01-2008, 08:57
salam man dishab in barname ro toi vi editore linux neveshtam kamelan kar mikard labod shoma daghighan eyne in barme ro toi turbo c neveshtid ke error dare khob az header conio.h estefade konid dar zemn system("clear ra pak konid va akharesh getch bezarid hatman kar mikonem ya inke mano add konid az tarigh yahoo messenger hoomanet_2000@yahoo.com ta moshkeletoni hal konam

soda_india
18-01-2008, 19:28
salam khodai in dige kar mikone emtehanesh kardam roi turbo c
#include<conio.h>
#include<stdio.h>
#include<string.h>
int flag=0,i,len;
int main()
{
char s[10];
char *ptr;
printf("\n Enter the string to be check ");
scanf("%s",s);
len=strlen(s);
ptr=s;

palindrome(ptr);
}
palindrome(char *c)

{
char *ptr1,*ptr2;
ptr2=c+(len-1);
ptr1=c;
for(i=0;i<=len/2;i++)
{
if(*ptr1==*ptr2)
{
flag=1;
ptr1++;
ptr2--;
}
else
{
flag=0;
break;
}
}
if(flag==1)
printf("\n palindrome ");
else
printf("\n not palindrome\n");
getch();
return 0;
}

soda_india
20-01-2008, 22:56
salam dooste aziz inam ye jore dige
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
{
char st[100];
int i,l;
printf("\n pls enter the string for check palindrome");
gets(st);
for(l=0;st[l]!='\0';l++);
for(i=0,l--;i<=l/2;i++)
if(st[i]!=st[l-i])
break;
if(i>l/2)
printf("\n palindrome ");
else
printf(" \n notpalindrome ");
getch();
return 0;