C 我不知道';I don’我不知道只有在某些情况下才能打印一个句子
我无法解决书中的一个问题 问题是: 读一个单词并向后输出字符串,然后向后输出, 如果回文与原件相同,则应打印回文 另外,不要使用诸如string.h之类的库,而是包括stdio.h 只是 所以我创建了下面的代码C 我不知道';I don’我不知道只有在某些情况下才能打印一个句子,c,string,loops,if-statement,C,String,Loops,If Statement,我无法解决书中的一个问题 问题是: 读一个单词并向后输出字符串,然后向后输出, 如果回文与原件相同,则应打印回文 另外,不要使用诸如string.h之类的库,而是包括stdio.h 只是 所以我创建了下面的代码 #include <stdio.h> int main() { char str[128]; char temp; int leng = 0; char a; scanf("%s", str); { a =
#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;
}
#包括
int main()
{
char-str[128];
焦炭温度;
int leng=0;
字符a;
scanf(“%s”,str);
{
a=str;
}
while(str[leng]!='\0')
冷++;
对于(int i=0;i
按相反顺序输出很容易解决,但我在打印回文的过程中受阻。我试图只在输入和输出值都是一样的
然而,我使用的if(a==str)是一个比较地址值的代码。
另外,我认为将strcmp实现为一个循环会很有用,但是我找不到一种方法来使用strcmp比较输入值和输出值
有没有办法比较输入值和输出值在C中?还是只有在特定情况下(输入=输出),才可以进行回文打印
我想知道我是否能准确地用C来编码输入值=输出值
注意,当地址值为都是一样的。所以我还没有看到:(使用这个函数:
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如果string1没有更多的字符,请检查string2。如果string2也没有更多的字符,请返回0。否则返回正数。这里是一个松散编写的未经测试的代码,可以解决您的问题
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 */
}
编译时打开警告,以便在执行之前捕获这些警告
编辑-为您交换
void swap( char *s, size_t i, size_t j )
{
char t = s[i];
s[i] = s[j];
s[j] = t;
}
您需要将“is palindrome”和“print reversed string”的测试分开。测试“palindrome”的一种方法是反向复制字符串,然后查看副本是否与原始字符串相同。另一种方法是比较第一个字符和最后一个字符-如果相同,则比较最后一个字符的第二个和第二个字符,然后你可以打印原稿和反面(或者打印原稿两次,因为你现在知道原稿和反面是一样的).Woww谢谢我将j初始化为s_len,这是另一个错误?可能没关系。是的
j
应该以s_len-1开头。我的扫描仪在上一个错误时停止了…)此更改还需要测试s_len>0
。这样说:Makei
和j
besize\u t
。还是看看str
的角盒,它只带了一个'\n'
。。。代码执行一个s_len--代码>太多了。修剪时。。。通常都是这样,但拐角处的情况很简单。我认为代码在修剪'\n'时不必要地减少了s_len,这在上面的循环中从未计算过,所以修剪逻辑中的s_len是不必要的,并且容易出错
void swap( char *s, size_t i, size_t j )
{
char t = s[i];
s[i] = s[j];
s[j] = t;
}