回文只是在C中使用循环

时间:2013-12-05 12:24:28

标签: c loops palindrome

我使用以下代码..但我正在寻找合适的条件。请帮我解决。

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;
}

3 个答案:

答案 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!");
}

Live demo here