#include<conio.h>
#include<stdio.h>
int main(void)
{
char str[20];
char *ptr1,*ptr2;
printf("Enter string\n");
gets(str);
ptr1,ptr2=&str[0];
while(*ptr2!='\0')
{
ptr2++;
}
ptr2--;
printf("rev_string =");
while(ptr1!=ptr2) //this should work for when strlen=odd integer
{
int temp=*ptr2;
*ptr2=*ptr1;
*ptr1=temp;
ptr1++;
ptr2--;
}
puts(str);
return 0;
}
我的代码有什么问题?我知道当字符串的长度是偶数时,我在while循环中输入的条件不会起作用,但它应该适用于奇数情况。
答案 0 :(得分:4)
似乎有一个错字
'#include<conio.h>
^^
C标准不再支持任何功能gets
。相反,您应该使用标准函数fgets
。
这个条件
while(ptr1!=ptr2)
对于具有偶数个字符的字符串是错误的,因为它永远不会等于false并且循环将是无限的。
以下陈述也是错误的
ptr1,ptr2=&str[0];
这里使用了逗号运算符,ptr1未初始化。
我认为你的意思是
ptr1 = ptr2 = &str[0];
程序可以按以下方式编写
#include<stdio.h>
int main( void )
{
char str[20];
char *ptr1,*ptr2;
printf( "Enter a string: ");
fgets( str, sizeof( str ), stdin );
ptr2 = str;
while ( *ptr2 != '\0' ) ++ptr2;
if ( ptr2 != str && *( ptr2 - 1 ) == '\n' ) *--ptr2 = '\0';
printf( "rev_string = " );
ptr1 = str;
if ( ptr1 != ptr2 )
{
for ( ; ptr1 < --ptr2; ++ptr1 )
{
int temp = *ptr2;
*ptr2 = *ptr1;
*ptr1 = temp;
}
}
puts( str );
return 0;
}