代码不适用于长回文

对手狗

我正在做一项作业,我必须在该处接受用户的句子输入,以相反的顺序打印单词,检查字谜和回文。我有一个适用于字谜的功能,而我的回文功能几乎可以正常工作。现在,我只要求输入两个单词,这样我的功能就可以正常工作了。但是,由于某些原因,每当我为我要的两个单词输入一个冗长的回文(例如:赛车或比妈妈或爸爸都减速的时候),回文功能就会混乱。

这是代码;

#include <stdio.h>
#include <ctype.h> //Included ctype for tolower / toupper functions
#define bool int
#define true 1
#define false 0

//Write boolean function that will check if a word is a palindrome
bool palindrome(char a[])
{
    int c=0;
    char d[80];
    //Convert array into all lower case letters
    while (a[c])
    {
        a[c] = (tolower(a[c]));
        c++;
    }
    c = 0;

    //Read array from end to beginning, store it into another array
    while (a[c])
        c++;

    while(a[c] != 0 && c > -1)
    {
        d[c] = a[c];
        c--;
    }

    c = 0;

    while(a[c])
    {
        printf("%c", d[c]);
        printf("%c", a[c]);
        c++;
    }
    //If two arrays are equal, then they are palindromes
    for(c = 0; a[c] && d[c]; c++)
    {
        while(a[c] && d[c])
        {
        if(a[c] != d[c])
            return false;
        }
    }
    return true;
}

int main(void)
{
    char a[80], b[80];
    bool flagp;
    //Prompt user to enter sentence
    printf("Enter a word: ");
    gets(a);

    flagp = palindrome(a);

    if (flagp)
    {
        printf("\nThe word is a palindrome.");
    }
    else
    {
        printf("\nThe word is not a palindrome.");
    }

    return 0;
}

它输出这个;

Enter first word: racecar
_r▬a↨c e c a r
The word is not a palindrome.

但是,如果我输入“ racecar”,则会错误地指出这不是回文。

请告诉我我在做什么错:'(

池上
  1. 所以,a[c] != d[c]当你想到它是假的是真的。
  2. 您已经向您printf证明这是因为d[c]是垃圾。
  3. 这表示其中d不包含的相反符号a
  4. 因此,这导致人们检查以下代码段:

    while(a[c] != 0 && c > -1)
    {
        d[c] = a[c];
        c--;
    }
    

    它正在尝试创建反向副本,但是很显然,由于它所放置的索引与所获取的索引相同,因此它在反转任何看到的内容时都失败了。

(您执行了前三个步骤。为什么要在这里停下来?)

老实说,根本没有理由d存在。所有这些都可以就地完成。

   +---+---+---+---+---+---+---+
a: | r | a | c | e | c | a | r |
   +---+---+---+---+---+---+---+
     ^                       ^
     |   compare these two   |


         ^               ^
         |  then these   |


                ...

因此,代码如下所示:

size_t len = strlen(a);
if (len) {
   size_t i = 0;
   size_t j = len - 1;
   while (i < j) {
      if (a[i++] != a[j--])
         return 0;
   }
}

return 1;

笔记:

  1. 请不要做#define true 1#define false 0它们与C的定义不同,因此如果您选择if (b == true)而不是,可能会得到错误的结果if (b)

  2. c通常表示chari(和jk)更常用于索引。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

此代码有效吗?适用于gcc,不适用于clang

来自分类Dev

代码不适用于长回文

来自分类Dev

代码不适用于JS Fiddle

来自分类Dev

省略号不适用于长网址

来自分类Dev

AVCaptureSession音频不适用于长视频

来自分类Dev

AngularJS代码不适用于NodeJS

来自分类Dev

弹性搜索范围不适用于长索引

来自分类Dev

Python代码适用于2.7,但不适用于3.5

来自分类Dev

Python代码适用于2.7,但不适用于3.5

来自分类Dev

Python代码仅适用于标题标签,不适用于表格

来自分类Dev

代码适用于Postman,但不适用于localhost Ajax

来自分类Dev

灵活的搜索查询适用于HAC,但不适用于Java代码

来自分类Dev

适用于gcc但不适用于clang的汇编代码

来自分类Dev

qsort()不适用于长整数数组

来自分类Dev

重构扑扑代码不适用于vs代码

来自分类Dev

代码不适用于大量

来自分类Dev

MPI代码不适用于2个节点,但适用于1个节点

来自分类Dev

代码适用于一种情况,但不适用于其他情况

来自分类Dev

代码适用于图像,但不适用于Codeigniter中的其他文件

来自分类Dev

基本代码不适用于jQuery

来自分类Dev

Angular代码不适用于Express

来自分类Dev

jQuery代码不适用于javascript

来自分类Dev

相同的代码适用于chrome DevTools控制台,但不适用于TamperMonkey

来自分类Dev

代码适用于Java,但不适用于Android

来自分类Dev

Android:代码适用于 api 19 但不适用于 api 24

来自分类Dev

粘贴不适用于长字符串?

来自分类Dev

OpenGL 代码适用于 GLFW 但不适用于 Qt OpenGL

来自分类Dev

C++ 模板代码适用于 msvc 2015 但不适用于 2017

来自分类Dev

是什么使此代码适用于 Y 轴而不适用于 X 轴?

Related 相关文章

热门标签

归档