首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C查找字符串中的所有Palindrome

使用C查找字符串中的所有Palindrome
EN

Stack Overflow用户
提问于 2018-10-14 19:20:06
回答 2查看 1.5K关注 0票数 0

我试图使用C打印所有的回文字串,并返回总数。

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

在printf语句的格式设置中,我至少有一个错误,但是在我的数组元素比较中,它的效果与我所期望的相反。

有人能看出我哪里出了问题吗?

这是我的代码:

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-15 18:45:10

在您的代码中只需要2处小的更正(如下所示),除了一切都很好:-

1.数组检查中的Continue语句应更改为中断:

代码语言:javascript
复制
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
    }
  }
}
  1. printf中的字符串长度不正确。

奇数部分使用:

代码语言:javascript
复制
printf(".*s\n",(2*j)+1,&s[i-j]);

甚至部分使用:

代码语言:javascript
复制
printf(".*s\n",(2*j)+2,&s[i-j]);
票数 0
EN

Stack Overflow用户

发布于 2018-10-16 23:26:03

谢谢你的帮助。这是我的最后一个节目。

代码语言:javascript
复制
#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]) 
        break;
      else
      {   
        if ((j + j) > 1)
        {   
          numPals++;
          printf("%.*s\n", ((2 * j) + 1), &s[i - j]);
        }   
      }   
    }   
  }

  //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]) 
        break;
      else
      {   
        if ((j + j) > 1)
        {   
          numPals++;
          printf("%.*s\n", ((2 * j) + 2), &s[i - j]);
        }   
      }   
    }   
  }
  return numPals;
}

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

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

  return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52806253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档