栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

倒置单词——C语言描述

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

倒置单词——C语言描述

案例分析

例如,现在我们输入:"I like programming.",要求的输出是:"programming. like I"。

很显然与一般的逆序字符串是有区别的。但是这种区别是有联系的,现在我来分析一下思路。

1.如果我们先逆序字符串会发生什么?字符串逆序的代码是?

当我们编写一个独立函数来逆序字符串,那么输出的应该是:".gnimmargorp ekil I"。到这里不难发现我们只要再将特定的单词再次逆序,就能得到标准输出。

这是一个很好的思路。

好了,现在关心的问题是如何实现字符串逆序。

#include 
void reverse(char* left,char* right)
{
	//逆序的本质就是头尾交换,所以我习惯定义成左右两个元素交换
	while (left < right)
	{
        //交换过程
		char tmp = *right;
		*right = *left;
		*left = tmp;
		left++;
		right--;
	}
}
int main()
{
    //创建存储字符串的数组
	char arr[101] = { 0 };

    //输入
	gets(arr);

    //逆序字符串
	int len = strlen(arr);
	reverse(arr, arr + len - 1);//我们将字符串首元素和尾元素地址作为参数

    //打印
    printf("%sn", arr);

	return 0;
}

 运行的效果就是这样:

 

2.如何实现单词逆序?

我们需要两个指针,用来指向单词头和尾。

 但是这样存在一个很大的弊端,那就是我们很难去找到任意一个单词的尾。那我们可以这样做:我们让"end"指针从头开始,往后遍历,直到碰到空格,我们就停止。

 当这个过程完成之后,我们需要重置一下头指针(下一个单词的逆序)。不难看出,当"end"指针"++"一下,就可以指向"ekil"的首元素地址,那我们直接将此时"end"的地址赋给"start"指针就好啦。

重复这个步骤,不难发现我们可以用循环来控制需要逆序的次数,判断条件理所应当就是" *start != "" "。

那么代码我们就可以这样写:

#include 
void reverse(char* left,char* right)
{
	//逆序的本质就是头尾交换,所以我习惯定义成左右两个元素交换
	while (left < right)
	{
        //交换过程
		char tmp = *right;
		*right = *left;
		*left = tmp;
		left++;
		right--;
	}
}
int main()
{
    //创建存储字符串的数组
	char arr[101] = { 0 };

    //输入
	gets(arr);

    //逆序字符串
	int len = strlen(arr);
	reverse(arr, arr + len - 1);//我们将字符串首元素和尾元素地址作为参数

    //创建一个单词头指针
    char* start=arr;
    
    //单词逆序
    while (*start)
	{
        //创建一个单词尾指针
		char* end = start;

		while (*end != ' ' && *end != '')
		{
		end++;
	    }
        
        //逆序,此时end是指向空格的,所以需要-1
	    reverse(start, end - 1);
        
        //重置头指针
	    end++;
        start = end;
	}

    //打印
    printf("%sn", arr);

	return 0;
}

到这里,我们的代码就写完了:

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923032.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号