给定一个字符串,将该字符串逆序转换无解了么?
给定一个字符串,将该字符串逆序转换,并输出。
输入数据:共 1 行数据,是一个字符串
输入数据:共 1 行数据,是一个字符串
输出数据:共
1
行数据,是一个字符串
题目如上,用了以下几种方法,明明在本机上输出都是倒序的,为啥说答案错呢?
方法1:
#include <stdio.h>
#include <string.h>
void conv(char *);
int main(void)
{
char str[80];
puts("Enter a string:");
gets(str);
conv(str);
return 0;
}
void conv(char *s)
{
int len=strlen(s);
int i,j;
char str2[80];
for(i=len-1,j=0;i>=0;i--,j++)
{
str2[j]=s[i];
}
str2[j]='\0'; // 或者 str[len-1]='\0'
puts(str2);
}
方法二:指针头尾互调
#include <stdio.h>
#include <string.h>
void conv(char *);
int main(void)
{
char str[80];
puts("Enter a string:");
gets(str);
conv(str);
printf("%s\n",str);
}
void conv(char *s)
{
// p指向字符串头部
char* p = s ;
// q指向字符串尾部
char* q = s ;
while( *q )
++q ;
q -- ;
// 交换并移动指针,直到p和q交叉
while(q > p)
{
char t = *p ;
*p++ = *q ;
*q-- = t ;
}
return s ;
}