我正在尝试使用C打印字符串中的所有回文,并返回总数。

我的代码返回不是回文的各种子字符串,并打印空白。

在我的printf语句格式中,我至少受到了影响,但是在我的数组元素比较中,它的工作与我预期的相反。

谁能看到我要去哪里错了?

这是我的代码:

#include<stdio.h>
#include<string.h>

char x[1000];

void getString(char *n)
{
  printf("\nPlease enter your string: ");
  scanf("%s", n);
}

int findPals(char *s)
{
  int length = strlen(s);
  int numPals = 0;

  //find odd palindromes
  for(int i = 0; i < length; i++)
  {
    for(int j = 0; j + i < length && i - j >= 0; j++)
    {
      if(s[i + j] != s[i - j])
        continue;
      else
      {
        numPals++;
        printf("%.*s\n", (j - i),s + i);
      }
    }
  }

  //find even palindromes
  for(int i = 0; i < length; i++)
  {
    for(int j = 0; j + i + 1 < length && i - j >= 0; j++)
    {
      if(s[i + j + 1] != s[i - j])
        continue;
      else
      {
        numPals++;
        printf("%.*s\n", (j - i),s + i);
      }
    }
  }
  return numPals;
}

int main()
{
  char inStr[1000];
  int totalPals;

  getString(inStr);
  totalPals = findPals(inStr);
  printf("I found %d palindromes.\n", totalPals);

  return 0;
}

最佳答案

除了一切都很好之外,您的代码中仅需要进行2次小的更正(如下所示):-

1,在数组检查中将continue语句改为break:

for(int i = 0; i < length; i++)
{
  for(int j = 0; j + i < length && i - j >= 0; j++)
  {
    if(s[i + j] != s[i - j])
      break; // continue statement has been changed to break;
    else
    {
      numPals++;
      printf(".*s\n",(2*j)+1,&s[i-j]); // The length of the string has been modified
    }
  }
}



printf中的字符串长度不正确。


对于奇数部分使用:

printf(".*s\n",(2*j)+1,&s[i-j]);


对于偶数部分使用:

printf(".*s\n",(2*j)+2,&s[i-j]);

10-07 19:18
查看更多