我在解决书中的一道题上遇到困难。
问题是:
读取一个单词并向后输出字符串,然后向后输出,如果回文与原始字符串相同,则应打印回文。
此外,不要使用库,如string.h .h,但仅包含stdio.h。
所以我创建了下面的代码。
#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语言准确地编码输入值=输出值。
请注意,当地址值相同时,我的代码打印回文。所以我还没看过:
发布于 2018-10-08 00:44:41
这是一个写得很松散的未经测试的代码,应该可以解决你的问题。
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 */
}
例如,您的代码中存在一些基本错误
a = str;
if (a == str)
打开编译时的警告,以便在执行之前很好地捕获这些警告。
编辑-为您编辑swap
。
void swap( char *s, size_t i, size_t j )
{
char t = s[i];
s[i] = s[j];
s[j] = t;
}
发布于 2018-10-08 00:41:54
使用此函数:
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。否则,返回一个正数。
https://stackoverflow.com/questions/52690560
复制相似问题