倒置字符串中的单词(含空格)

//倒置字符串中的单词(含空格)
//例:将 I like beijing.倒置为 beijing. like I
#include<stdio.h>
#include<string.h>
#include<assert.h>
void reverse(char* left,char* right)  //倒置函数
{
    assert(left && right);   //断言,若left或right为NULL则会报错
    while(left<right)
    {
        char tmp = 0;
        tmp = *left;
        *left = *right;
        *right = tmp;
        left++;
        right--;
    }
}
int main()
{
    char arr[100] = {0};
    gets(arr);  //使用gets函数可读取空格,若使用scanf则遇到空白符(空格,tab,换行)时自动认为字符串结束
    int sz = strlen(arr);
    reverse(arr, arr + sz - 1);    //1.先将整个字符串倒置
    char* star = arr;
    char* end = arr;
    while(*end!='\0')      //可以从首元素访问到\0
    {
        end++;    //该处不能使用arr++,因为arr是数组首元素的地址,为常量,不能++
        
        if(*end==' ')    //单词的结束标志为空格
        {
            reverse(star,end-1);   //2.再对每一个单词进行倒置
            star = end + 1;   //更换起始地址,以便再次调用函数时该地址就是新单词的起始地址
        }    
    }
    reverse(star, end - 1);   //因为退出循环代表遇到了\0,而\0是最后一个单词结束的标志,所以还需使用一次reverse函数
    printf("%s\n", arr);
    return 0;

}
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值