求大神,哪里错了?

来源:1-1 Linux C语言结构体简介

qq_愿时光安好_04050009

2017-01-20 00:44

#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回答

  • 筑梦之队
    2017-01-20 10:46:26
    已采纳

    //倒序打印

    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

    qq_愿时光...

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

    2017-01-30 11:09:20

    共 1 条回复 >

  • weixin_慕移动5316475
    2020-11-09 14:43:12

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

Linux C语言结构体

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

118294 学习 · 162 问题

查看课程

相似问题