编程实现英语句子按单词倒叙-C语言

C语言实现英语句子按单词倒叙

题目:有一个字符数组的内容为:”student a am i”,请你将数组的内容改为”i am a student”.

要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。

分析及解题思路

可以看出这句话(字符串)是以单词为单位倒叙,即单词本身内部并不倒叙。所以不可以将整个字符串倒叙。

思路:先将整个字符串倒叙(此时单词内部也倒叙了),再做每个单词内部的调整。

编程步骤

1.主函数

  • 声明字符数存储字符串
  • 用函数实现功能——函数后文详解
int main()
{
        char arr[] = "student a am i";
        int len = strlen(arr);

        Swap(arr, ( arr+len-1));     //倒换字符串

        SwapWord(arr, len);          //倒换单词--内部套用swap()函数

        printf("%s\n",arr);
        return 0;
}
  • Swap 函数的参数是两个指针,第一个指针指向首字符,第二个指针指向尾字符
  • 注意 数组最后一个元素下标为长度减一即(len-1)

2.构造倒换字符串的函数 Swap(char *p1,char *p2);

  • 参数为字符指针传入首位元素地址
void Swap(char *p1,char *p2)
{
        while(p1<=p2)
        {
                char inter;
                inter = *p1;
                *p1 = *p2;
                *p2 = inter;
                p1++;
                p2--;
        }
}

3.构造倒换单词函数 void SwapWord(char arr[ ],int len);

  • 需要的参数为:已经整体倒叙后的字符数组,和数组的长度(用来控制循环)
  • 创建一个动态变量status用来表示循环到单词内部还是在空格部分,0表示在单词外,即遇到不是空格且status==0则将指针p1指向单词的第一个字母,并将status改为1,在当遇到空格且status==1时则将指针p2指向单词最后一个字母arr[i-1]同时将status改为0.
  • 可利用Swap函数进行调换提高代码利用率,只需将单词第一个字母地址和单词结尾字母地址传入
void SwapWord(char arr[],int len)
{
        int i = 0, status = 0;
        char *p1 = NULL, *p2 = NULL;
          for(i = 0; i<len; i++)
        {
                if(arr[i]!= ' '&& status == 0 )
                {
                        p1 = &arr[i];
                        status = 1;
                }
                if(arr[i]== ' '&& status ==1)
                {
                        p2 = &(arr[i-1]);
                        status = 0;
                        Swap(p1,p2);
                }
        }
        p1= p1;
        p2 = &arr[len-1];
        Swap(p1,p2);
}
  • 因为最后一个单词后没有空格,所以循环时无法处理到最后一个单词,需在循环后再做处理,循环后p1已经指向最后一个单词的首字母,只需将p2指向最后单词尾字母后再次调用Swap函数即可

结果展示

  • 代码整体
    这里写图片描述

  • 结果展示
    这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值