666HZ666 2024-02-12 11:21 采纳率: 100%
浏览 5
已结题

C语言大一新生,求解答

C语言大一新生,求解答
C语言大一新生,求解答
题目:字符串反转

img

  • 写回答

5条回答 默认 最新

  • a5156520 2024-02-12 13:35
    关注

    函数reverse()首先遍历字符串每个字符, 以计算字符串长度,然后根据这个长度来循环将字符串前后两部分对应的字符交换位置,循环结束即将字符串完成了逆序。

    测试如下:

    #include <stdio.h>
    
    void reverse(char *s){
        
        int len=0;
        char *p=s; // 让字符指针p指向字符串的起始位置 
        
        while(*p!=0){  // 遍历字符串s中的每个字符,直到遇到字符串结尾的空字符结束才结束循环 
            len++;  // 每遍历到一个字符,字符串长度+1 
            p++;  // 字符指针p指向字符串的下一个字符位置 
        }
        //printf("len=%d\n",len); 
        
        int i=0;  // 下标变量i,初始化为0,用于访问字符串的字符 
        char c;
        // 如果下标变量i小于等于len/2-1,下标0到(len/2-1)为字符串前半部分字符的下标区间,(len/2)到(len-1)为字符串后半部分字符的下标区间 
        // 例如,字符串长度为14,则len/2-16, 前半部分字符下标为:0 1 2 3 4 5 6,后半部分字符下标为: 7 8 9 10 11 12 13 
        // 字符长度如果为奇数,例如为7,则len/2-12,前半部分字符下标为:0 1 2 ,后半部分字符下标为:4 5 6 ,下标为3的字符位于字符串正中间不用交换   
        while(i<=len/2-1){  
            
            printf("i=%d,len-1-i=%d\n",i,len-1-i);
            c=*(s+i);  // 将前半部分相应为的字符赋值给字符变量c 
            *(s+i)=*(s+len-1-i);  // 将前半部分的相应字符修改为后半部分的相应位置的字符 
            *(s+len-1-i)=c;  // 将后半部分相应位置的字符修改为前半部分相应位置的原字符,如此即将前后部分的字符完成交换,循环结束,字符串即完成逆序操作 
            i++;  // 下标变量i指向下个字符位置 
        }    
    } 
    
    int main(void){
        
        char s[] = "www.runoob.com";
    //    char s[] = "abcdefg";
        printf("'%s' ==>\n",s);  // 打印逆序前的字符串 
        reverse(s);  // 调用函数完成字符串逆序 
        printf("'%s'\n",s);  // 打印逆序后的字符串 
        
        return 0;
    
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 2月23日
  • 已采纳回答 2月15日
  • 创建了问题 2月12日

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集