为了账号安全,请及时绑定邮箱和手机立即绑定

求大神,哪里错了?

#include <stdio.h>

#include <string.h>


int main(void)

{

char word[10];

int length, index, temp;

printf ("please Enter a word:\n");

while (scanf("%s", word)==1)

{

length = strlen(word);//倒序打印

for(index=0; index<=(length+index)/2; index++) //二分 交换 

{

temp = word[index];

word[index] = word[length-index];

word[length-index] = temp;

}

printf ("%s", word);

printf ("Do you want to continue?\n");

}

return 0;

}

为什么没交换?

正在回答

2 回答

//倒序打印

for(index=0; index<=length/2-1; index++)        //二分 交换 

{

    temp = word[index];

    word[index] = word[length-index-1];

    word[length-index-1] = temp;

}

1、一个基本的错误为:没有意识到数组的下标是位于[0,length),所以导致出现了后面两个问题:

2、二分交换的结束值的取值有问题。应该是length/2-1,而不是(length+index)/2

3、交换时选择的下标有问题,应该是length-index-1,而不是length-index

1 回复 有任何疑惑可以回复我~
#1

qq_愿时光安好_04050009 提问者

万分感谢,但我有一个问题,你的公式不能通用吧... 2.假如需要交换的下标不是从零开始而是一部分 7到15,应该是((length-1)+index)/2 对吗? 这个公式能通用不? 长度-1得到最大下标,+最小下标再除以2 应该是中位数吧... 应该没记错....
2017-01-30 回复 有任何疑惑可以回复我~

讲的不错,受益匪浅,本人自己总结了C语言的基本学习知识,函数语法 数据结构 链表 数组 指针等视频合集给大家提供学习,需要学习的,包括有学习相关问题,可以进入(裙:834597065)交流,里面有众多大佬帮助解决学习、技术问题,只针对C/C++问题哦

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Linux C语言结构体
  • 参与学习       118259    人
  • 解答问题       162    个

C语言的深入,帮助小伙伴们进一步的理解C语言,赶紧看过来

进入课程

求大神,哪里错了?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信