首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我不知道只有在某些情况下才能打印句子

我不知道只有在某些情况下才能打印句子
EN

Stack Overflow用户
提问于 2018-10-08 00:29:16
回答 2查看 61关注 0票数 -2

我在解决书中的一道题上遇到困难。

问题是:

读取一个单词并向后输出字符串,然后向后输出,如果回文与原始字符串相同,则应打印回文。

此外,不要使用库,如string.h .h,但仅包含stdio.h。

所以我创建了下面的代码。

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

int main()
{
    char str[128];
    char temp;
    int leng = 0;
    char a;

    scanf("%s", str);
    {
        a = str;
    }
    while(str[leng] != '\0')
        leng++;

    for (int i = 0; i < leng/2; i++)
    {
      temp = str[i];
      str[i] = str[leng - i - 1];
      str[leng - i - 1] = temp;
    }
    printf("%s\n", str);
    {
        if (a == str)
            printf("palindrome\n");
    }
    return 0;
}

逆序输出很容易解决,但我在打印回文时阻塞了这个过程。我尝试仅在输入值和输出值​​相同的情况下打印回文。

但是,我使用if (一个==字符串)是用于比较地址值的代码。此外,我认为将strcmp实现为循环会很有用,但我找不到使用strcmp比较输入值和输出值的方法。

有没有办法比较C中的输入值和输出值​​?或者有没有一种方法可以只在某些情况下(输入=输出)进行回文打印?

我想知道我是否可以用C语言准确地编码输入值=输出值。

请注意,当地址值​​相同时,我的代码打印回文。所以我还没看过:

EN

回答 2

Stack Overflow用户

发布于 2018-10-08 00:44:41

这是一个写得很松散的未经测试的代码,应该可以解决你的问题。

代码语言:javascript
复制
char str[128];

if( fgets( str, 128, stdin ) )
{
   /* I hate this but restriction on string.h 
      Calculate the size of this string */

   size_t s_len = 0;
   char *p = str;   
   for( ; *p && *p != '\n' ; p++ )
      s_len++;

   /* trim down nextLine characters */      
   if( p && *p == '\n' ) 
   {
      *p = '\0';
   }

   if( s_len == 0 )
   { 
        /* Should never be the case here */
        exit(0);
   }

   /* This should handle both cases of reversing and pallindrom */
   int isPallindrom = 1; /* Lets Say Yes for now*/
   for( size_t i = 0, j = s_len-1; i < j ; i ++, j -- )
   {
        if( str[i] != str[j] )
           isPallindrom = 0; // Not a pallindrom

        swap( str, i, j); // Write a swap function here
   } 

   /* at this point you should have 
      1. a reversed string in a
      2. based on isPallindrom value a confirmation if it really a pallindrom */
}

例如,您的代码中存在一些基本错误

代码语言:javascript
复制
 a = str; 

if (a == str)

打开编译时的警告,以便在执行之前很好地捕获这些警告。

编辑-为您编辑swap

代码语言:javascript
复制
void swap( char *s, size_t i, size_t j )
{ 
    char t = s[i];
       s[i] = s[j];
       s[j] = t;
}
票数 1
EN

Stack Overflow用户

发布于 2018-10-08 00:41:54

使用此函数:

代码语言:javascript
复制
int compare(char *str1, char *str2)
{
    while(*str1 && *str2){
        if(*str1 ==  *str2){
            str1++;
            str2++;
        }
        else return (*str2 - *str1);
    }
    if(*str1)
        return -1;
    if(*str2)
        return 1;
    return 0;
}

逻辑:

直到在其中一个字符串中遇到'\0‘,请检查任一字符串中的字符。如果字符相等,则继续。否则,返回string1 > string2中字符的负数,如果string1 < string2中的字符为正数,则返回正数。

遇到'\0‘后,请检查string1是否还有其他字符。如果是,它是较大的字符串,因此返回一个负数。如果string1没有更多的字符,请检查string2。如果也没有更多的字符,则返回0。否则,返回一个正数。

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

https://stackoverflow.com/questions/52690560

复制
相关文章

相似问题

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