首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查c++中的回文字符串

检查c++中的回文字符串
EN

Stack Overflow用户
提问于 2010-08-13 03:05:32
回答 6查看 11.9K关注 0票数 3

我接受一个字符串作为命令行参数。我想检查输入的字符串是否为回文,并打印结果。我写了以下代码。但是它显示了所有输入的结果“不是回文”。

代码语言:javascript
复制
#include<stdio.h>
#include<string.h>

int main(int argc, char argv[20]) {
    int i;
    int l = strlen(argv);    
    char str[20];
    bzero(str, 20);

    for(i=0; i<l; i++)
    {
        str[i] = argv[i+2];
    } 
    int flag;
    int len = strlen(str);
    for(i=0; i< len/2; i++)
    {
        if(str[i] == str[len - (i+2)])
        {
            flag = 0;
        }
        else
        {
            flag = 1;
            break;
        }
    }

    if(flag == 0)
        printf("Palindrome\n");
    else
        printf("Not a palindrome\n");
}
EN

回答 6

Stack Overflow用户

发布于 2010-08-13 05:44:05

您可以通过在for-loop中使用两个偏移量迭代器来实现K&R风格:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
#include <assert.h>

int main(int argc, char *argv[]) {
    assert(argc != 1);

    char *text = argv[1];

    int len = strlen(text);
    int is_palindrome = 1;
    int i, j;

    for(i = 0, j = len - 1; i < len / 2; i++, j--) {
        if(text[i] != text[j]) {
            is_palindrome = 0;
            break;
        }
    }

    printf("%s a palindrome.\n", is_palindrome ? "is" : "isn't");

    return(0);
}

与原始版本相比的更改:

  • 将移位(len >> 1)改为除法(len/ 2),就像tenfour建议的那样。
票数 5
EN

Stack Overflow用户

发布于 2010-08-13 15:15:02

根据评论更新:

代码语言:javascript
复制
int is_palindrome(const char *s)
{
   const char *t = s + strlen(s);
   while (s<t && *s==*--t) s++;
   return s>=t;
}

由于OP想要一个不会占用大量指针的版本:

代码语言:javascript
复制
int is_palindrome(const char *s)
{
   size_t i=0, j = strlen(s);
   while (i<j && s[i]==s[--j]) i++;
   return i>=j;
}

作为参考,这里是原始的buggy版本:

代码语言:javascript
复制
int is_palindrome(const char *s)
{
   const char *t = s + strlen(s) - 1;
   while (s<t && *s++==*t--);
   return s>=t;
}
票数 2
EN

Stack Overflow用户

发布于 2010-08-13 03:11:38

首先,你对main的签名已经失效了。它应该是int main(int argc, char** argv)int main(int argc, char * argv[])。您将一个指向字符串的指针视为一个字符串。

更改后,所需的字符串应为argv[1]格式(因为argv[0]是程序名的某种表示形式)。

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

https://stackoverflow.com/questions/3471076

复制
相关文章

相似问题

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