C语言。把字符串中下标为偶数的字符右移到下一个偶数位置。若输入:abcd123,输出:3badc21。这段错哪了

#include<stdio.h>voidfun(char*s){inti,j;for(i=79;i>=2;i--){if(i%2==0)s[i]=s[i-2];}for... #include<stdio.h>

void fun(char *s)
{
int i,j;
for(i=79;i>=2;i--)
{
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 main()
{char str[80];
gets(str);
fun(str);
puts(str);
}
展开
 我来答
cabeng
2015-06-04 · TA获得超过755个赞
知道小有建树答主
回答量:801
采纳率:55%
帮助的人:484万
展开全部
#include<stdio.h>
#include<string.h>
// 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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wchyumo2011
2015-06-04 · TA获得超过2万个赞
知道大有可为答主
回答量:5810
采纳率:79%
帮助的人:2723万
展开全部

感觉你的代码有点问题,帮你改了一下:

#include<stdio.h>
#include <string.h>//计算字符串长度头文件

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;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式