我使用以下代码..但我正在寻找合适的条件。请帮我解决。
int main(){
int k = 0;
char a[9] = {'\0'}, b[9] = {'\0'};
printf("enter string \n");
gets(a);
int p = strlen(a);
for(int i = p-1; i >= 0; i--){
b[k] = a[i];
k = k+1;
}
for(int j = 0; j < p; j++){
if(a[j] == b[j]){
continue;
}else
printf("not pal");
break;
}
return 0;
}
答案 0 :(得分:1)
for(int j=0;j<p;j++)
{
if(a[j]!=b[j])
{
printf("not pal");
return 0;
}
}
printf("string is Palindrome");
return 0;
答案 1 :(得分:0)
这是代码..
int main(){
int k=0, flag;
char a[9]={'\0'},b[9]={'\0'};
printf("enter string \n");
gets(a);
int p = strlen(a);
for(int i=p-1;i>=0;i--){
b[k]=a[i];
k=k+1;
}
for(int j=0;j<p;j++){
if(a[j]==b[j]){
flag=0;
}else
flag=1;
break;
}
if(flag==0)
printf("yes");
else
printf("no");
return 0;
}
答案 2 :(得分:0)
无需复制字符串。下面的代码使用整个字符串的大小来复制镜像字母并检查是否相等。复杂性为O(N/2)
(如果甚至存在:-p
。
#include <stdbool.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
bool is_palindrome(const char* s)
{
const size_t len = strlen(s);
size_t i=0;
while(i<len/2-1)
{
if(s[i] != s[len-i-1])
return false;
++i;
}
return true;
}
int main()
{
const char* s1 = "palindrome";
const char* s2 = "palindromemordnilap";
if(is_palindrome(s1))
printf("uhoh");
if(is_palindrome(s2))
printf("yay!");
}