c语言中单词翻转案例!

c语言中单词翻转案例!

        输入:

                i like china

        输出:

                china like i

这里我们可以设计成用户输入方式,因为偷懒所以就没有写输入的代码了,直接声明一个数组

大小根据字符串的长度来确定,包含结束符

        char arr [] = "i like chine"

整理思路,先将全部字符串进行翻转,在将局部单词进行翻转

然后根据空格来区分单词的结束

写一个翻转的函数,进行字符串翻转,需传入开始地址和结束地址,使用三水桶方式进行字符串翻转。

这里因为没有给数组设置大小,他的大小是根据字符串的长度来决定,如若指针超出就会报非法使用,所以我们会和其他实现稍稍有一些不同

#include <stdio.h>
//字符串翻转函数,不需要返回值,因为操作的是具体地址
void revers_all_word(char* left, char* right) {
    //这里这样写是因为在数组中,栈内存开辟的是连续的一块空间,所以比对指针是有意义的
    //这里使用后置自增自减刚好符合场景
    while (left < right) {
        char temp = *left;
        *left++ = *right;
        *right-- = temp;
    }
}
//第二步实现查找单词
void word_revers(char* str) {
    /*正如前面所说,没有指定大小,
后面的空间是野指针不可以使用,所以我们拿长度进行判断是否需要自增跳过空格或者结束符*/
    int len = strlen(str);
    char* left = str;
    char* right = str;
    while (*right) {
        while (*right) {
            if (*right != ' ' && *right != '\0') {
                right++;
            }
            else {
                break;
            }
        }
        revers_all_word(left, right - 1);
        if (right - str < len) {
            left = ++right;
        }
    }
}
//程序main函数入口
int main() {
    char arr[] = "i like china";
    char* left = arr;
    char* right = arr + (strlen(arr)-1);
    printf("%s \n", arr);//翻转前
    revers_all_word(left, right);
    word_revers(arr);
    printf("%s \n", arr);
    return 0;
}

               

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值