#include
#include
// void fun(char *s) {
// int i, j;
// for (i = 79; i >= 2; i--) { //万一输入的没有80个字符呢?
// if (i % 2 == 0)
// s[i] = s[i - 2]; //最末位字符没有保存就被覆盖了。不能还原了啊。
// }
// for (j = 78; ; j--) {
// if (s[j + 1] == 0 && s[j] != 0)
// break;
// }
// s[0] = s[j];
// s[j] = 0;
// }
void fun(char *s) {
char tmp;
int i = strlen(s); // 计算一下串总长度
i = i % 2 ? i - 1 : i - 2; // 算出下标为偶数的最后一个字符的下标
tmp = s[i]; // 先保存下标为偶数的最后一个的字符。
for (; i > 0; i -= 2)
s[i] = s[i - 2]; // 从后往前替换掉。
s[0] = tmp; // 还原到首位
}
void main() {
char str[80];
gets(str);
fun(str);
puts(str);
}
感觉你的代码有点问题,帮你改了一下:
#include
#include//计算字符串长度头文件
void fun(char *s)
{
int i;
int len = strlen(s);//计算字符串长度
char temp = s[(len%2==1? len-1 : len-2)];//记录最后一个偶数位元素的值
for(i=len - 1;i>=2;i--)
{
if(i%2==0)
s[i]=s[i-2];
}
/*for(j=len-2;;j--)
{
if(s[j+1]==0&&s[j]!=0)
break;
}
s[0]=s[j];
s[j]=0;
*/
s[0] = temp;//第一个位置放最后一个偶数位置的值
}
int main()
{
char str[80];
gets(str);
fun(str);
puts(str);
return 0;
}