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

2025-03-29 06:18:32
推荐回答(2个)
回答1:

#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);
}

回答2:

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

#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;
}