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);
} 展开
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);
} 展开
2个回答
展开全部
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
感觉你的代码有点问题,帮你改了一下:
#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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询