C语言:将一句话的单词进行倒置,标点不倒置。

这篇具有很好参考价值的文章主要介绍了C语言:将一句话的单词进行倒置,标点不倒置。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目:

一句话单词进行倒置标点不倒置。(字符数组长度不超过100)

比如:I like beijing.

经过函数后变为:beijing. like I

                    

 =========================================================================

                       

思路:

总体思路:

可以两步顺序调换
               

第一步把 整个字符串 逆序

(知道 整个字符串 首尾地址后,一对一对向整个字符串中间靠拢交换

           

第二步再逆序 每个单词
(知道 每个单词首尾地址后,一对一对向单词中间靠拢交换

              

两步中逆序的方法一样的,可以写一个相应的 自定义函数reverse

                


                 

补充知识点一:gets()

读取一个 字符串即使中间有空格

               

    gets(arr);  --  把读取到的字符串 放进 字符串数组arr

               

(编译器可能会觉得该函数不安全而报警告,因为读取的字符串放进数组后可能会导致数组越界,可能会报错爆红,但还是可以用的)

                


                 

补充知识点二:fgets()

可以使用 fgets()函数 替代 gets()函数

               

fgets(arr, 100, stdin);

               

函数参数:

               

arr:把读取的字符串放进字符数组arr

               

100获取字符串最大字符数,这里设置为100

               

stdin输入方式stdin 键盘输入

               

(因为指定了获取的字符个数,所以不用担心数组越界,也就不会报警告

                


                 

第一步:

完成 逆序自定义函数reverse 编写:

         

(1).  

函数参数:

char* left -- 左元素位置

char* right -- 右元素位置

         

(2).

使用 while循环left < right 继续循环逆序,因为此时数组还有数

                

使用临时变量tmp,进行数组元素调换

         

调换一次后就调整一次左右位置

                     

实现代码:

#include <stdio.h>

//逆序自定义函数 reverse:
void reverse(char* left, char* right)
{
	//使用while循环:
	while (left < right)
	//左小于右,说明中间还有值且没有指向一个字符,继续逆序
	{
		//使用临时变量tmp进行逆序:
		char tmp = *left;
		*left = *right;
		*right = tmp;
		//调换后调整左右位置
		left++;
		right--;
	}
}

int main()
{

}

实现图片:

C语言:将一句话的单词进行倒置,标点不倒置。

                 


                 

第二步:

主函数:

            

(1). 定义字符数组,数组长度不超过100,那就设置为101

         

(2). 使用 gets(arr); 读取到的字符串 放进 字符串数组arr

            

(3). 求字符串长度 -- strlen(arr); 需要头文件<string.h>

            

(4). 使用 逆序自定义函数reverse 逆序 整个字符数组

整个数组arr的左右下标传给函数reverse即可

                     

实现代码:

#include <stdio.h>
#include <string.h>

//逆序自定义函数 reverse:
void reverse(char* left, char* right)
{
	//使用while循环:
	while (left < right)
	//左小于右,说明中间还有值且没有指向一个字符,继续逆序
	{
		//使用临时变量tmp进行逆序:
		char tmp = *left;
		*left = *right;
		*right = tmp;
		//调换后调整左右位置
		left++;
		right--;
	}
}

int main()
{
	//定义字符数组:
	char arr[101];

	//使用 gets(arr) 获取字符串
	gets(arr);

	//求字符串长度:
	int len = strlen(arr);
	//strlen 不会把 \0 计算进去,找到 \0 就停了
	//需要头文件:<string.h>

	//逆序整个字符串:
	reverse(arr, arr + len - 1); //调用自定义逆序函数
	//函数参数:数组首地址(左指针)、最后一个字符的地址(右指针)
	//arr+len-1:首地址 + 数组长度 - 1 --> 最后一个字符的地址
}

实现图片:

C语言:将一句话的单词进行倒置,标点不倒置。

                 


                 

第三步:

主函数:逆序整个单词:

         

(1). 定义单词 起始 尾部 位置

char* start; -- 单词起始位置

char* cur; -- 单词尾部位置

              

(2). 使用 while循环 循环查找单词并逆序单词

*cur 单词尾部还没有到结束符 '\0' 就继续找单词

            

(3). 内嵌 while循环 ,调整 cur 单词尾部位置:

*cur 单词尾部还没有到 空格(每个单词间隔一个空格) 

 还没到结束符 '\0' 

cur++调整当前单词尾部位置

             

(4). 经过上一个步骤,找到了一个单词(第一次while循环),

对该单词进行逆序

调用 逆序函数reverse,

将该单词的首位(左右)位置传给reverse即可

                     

(5). 调整 start 单词起始位置到下一个单词的起始位置

start = cur +1; -- cur + 1, 空格后的下一个位置就是下一个单词的起始位置 

               

(6). 调整 cur 单词尾部位置

先使用 if条件判断语句 调整到空格后一位,即单词起始位置

再在下一次循环通过内嵌的 while循环 调整到该单词的尾部位置

              

实现代码:

#include <stdio.h>
#include <string.h>

//逆序自定义函数 reverse:
void reverse(char* left, char* right)
{
	//使用while循环:
	while (left < right)
	//左小于右,说明中间还有值且没有指向一个字符,继续逆序
	{
		//使用临时变量tmp进行逆序:
		char tmp = *left;
		*left = *right;
		*right = tmp;
		//调换后调整左右位置
		left++;
		right--;
	}
}

int main()
{
	//定义字符数组:
	char arr[101];

	//使用 gets(arr) 获取字符串
	gets(arr);

	//求字符串长度:
	int len = strlen(arr);
	//strlen 不会把 \0 计算进去,找到 \0 就停了
	//需要头文件:<string.h>

	//逆序整个字符串:
	reverse(arr, arr + len - 1); //调用自定义逆序函数
	//函数参数:数组首地址(左指针)、最后一个字符的地址(右指针)
	//arr+len-1:首地址 + 数组长度 - 1 --> 最后一个字符的地址

	//逆序每个单词:
	//定义 单词的 起始 和 尾部 位置:
	char* start = arr; //单词起始位置
	char* cur = arr; //单词尾部位置,后面再调整

	//使用 while循环 循环查找并逆序单词:
	while (*cur != '\0')
	//整个字符串还没结束,继续找单词
	{
		//内嵌 while循环 调整单词尾部位置cur:
		while (*cur != ' ' && *cur != '\0')
		//单词尾部未找到空格且还没有结束符就继续往后移一位
		{
			cur++;//往后移一位
		}//直到找到单词,此时在空格位置

		//找到单词后进行单词逆序:
		reverse(start, cur - 1);
		//因为单词尾部 cur 此时在 空格位置,
		//所以要在空格(或\0,最后一个单词)位置前-1

		//找下一个单词:
		//调整start单词起始位置:
		start = cur + 1;
		//cur+1,空格后的下一个位置就是下一个单词的首地址

		//调整单词尾部位置:
		if (*cur == ' ')
		//只有是空格时才能跳过,\0不能再跳过了,不然就跳不出循环了
		{
			cur++;//调整下一个单词尾部位置到起始位置
		}
	}

}

实现图片:

C语言:将一句话的单词进行倒置,标点不倒置。

                 


                 

第四步:

两个逆序都完成后,进行打印

                     

实现代码:

#include <stdio.h>
#include <string.h>

//逆序自定义函数 reverse:
void reverse(char* left, char* right)
{
	//使用while循环:
	while (left < right)
	//左小于右,说明中间还有值且没有指向一个字符,继续逆序
	{
		//使用临时变量tmp进行逆序:
		char tmp = *left;
		*left = *right;
		*right = tmp;
		//调换后调整左右位置
		left++;
		right--;
	}
}

int main()
{
	//定义字符数组:
	char arr[101];

	//使用 gets(arr) 获取字符串
	gets(arr);

	//求字符串长度:
	int len = strlen(arr);
	//strlen 不会把 \0 计算进去,找到 \0 就停了
	//需要头文件:<string.h>

	//逆序整个字符串:
	reverse(arr, arr + len - 1); //调用自定义逆序函数
	//函数参数:数组首地址(左指针)、最后一个字符的地址(右指针)
	//arr+len-1:首地址 + 数组长度 - 1 --> 最后一个字符的地址

	//逆序每个单词:
	//定义 单词的 起始 和 尾部 位置:
	char* start = arr; //单词起始位置
	char* cur = arr; //单词尾部位置,后面再调整

	//使用 while循环 循环查找并逆序单词:
	while (*cur != '\0')
	//整个字符串还没结束,继续找单词
	{
		//内嵌 while循环 调整单词尾部位置cur:
		while (*cur != ' ' && *cur != '\0')
		//单词尾部未找到空格且还没有结束符就继续往后移一位
		{
			cur++;//往后移一位
		}//直到找到单词,此时在空格位置

		//找到单词后进行单词逆序:
		reverse(start, cur - 1);
		//因为单词尾部 cur 此时在 空格位置,
		//所以要在空格(或\0,最后一个单词)位置前-1

		//找下一个单词:
		//调整start单词起始位置:
		start = cur + 1;
		//cur+1,空格后的下一个位置就是下一个单词的首地址

		//调整单词尾部位置:
		if (*cur == ' ')
		//只有是空格时才能跳过,\0不能再跳过了,不然就跳不出循环了
		{
			cur++;//调整下一个单词尾部位置到起始位置
		}
	}

	//两个逆序都完成后,进行打印:
	printf("%s", arr);

}

实现图片:

C语言:将一句话的单词进行倒置,标点不倒置。

                    

最终代码和实现效果

最终代码:

#include <stdio.h>
#include <string.h>

//逆序自定义函数 reverse:
void reverse(char* left, char* right)
{
	//使用while循环:
	while (left < right)
	//左小于右,说明中间还有值且没有指向一个字符,继续逆序
	{
		//使用临时变量tmp进行逆序:
		char tmp = *left;
		*left = *right;
		*right = tmp;
		//调换后调整左右位置
		left++;
		right--;
	}
}

int main()
{
	//定义字符数组:
	char arr[101];

	//使用 gets(arr) 获取字符串
	gets(arr);

	//求字符串长度:
	int len = strlen(arr);
	//strlen 不会把 \0 计算进去,找到 \0 就停了
	//需要头文件:<string.h>

	//逆序整个字符串:
	reverse(arr, arr + len - 1); //调用自定义逆序函数
	//函数参数:数组首地址(左指针)、最后一个字符的地址(右指针)
	//arr+len-1:首地址 + 数组长度 - 1 --> 最后一个字符的地址

	//逆序每个单词:
	//定义 单词的 起始 和 尾部 位置:
	char* start = arr; //单词起始位置
	char* cur = arr; //单词尾部位置,后面再调整

	//使用 while循环 循环查找并逆序单词:
	while (*cur != '\0')
	//整个字符串还没结束,继续找单词
	{
		//内嵌 while循环 调整单词尾部位置cur:
		while (*cur != ' ' && *cur != '\0')
		//单词尾部未找到空格且还没有结束符就继续往后移一位
		{
			cur++;//往后移一位
		}//直到找到单词,此时在空格位置

		//找到单词后进行单词逆序:
		reverse(start, cur - 1);
		//因为单词尾部 cur 此时在 空格位置,
		//所以要在空格(或\0,最后一个单词)位置前-1

		//找下一个单词:
		//调整start单词起始位置:
		start = cur + 1;
		//cur+1,空格后的下一个位置就是下一个单词的首地址

		//调整单词尾部位置:
		if (*cur == ' ')
		//只有是空格时才能跳过,\0不能再跳过了,不然就跳不出循环了
		{
			cur++;//调整下一个单词尾部位置到起始位置
		}
	}

	//两个逆序都完成后,进行打印:
	printf("%s", arr);

}

实现效果:

C语言:将一句话的单词进行倒置,标点不倒置。文章来源地址https://www.toymoban.com/news/detail-491624.html

到了这里,关于C语言:将一句话的单词进行倒置,标点不倒置。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 你真的了解一句话木马吗?

    目录 一、前言: 二、什么是一句话木马: 三、常见的一句话木马: 木马讲解: 1、$_POST[cmd] 2、eval() 3、\\\"@\\\" 4、脉络梳理 四、可用于条件竞争的一句话木马: 木马讲解: 1、fopen() 2、fputs()  3、脉络梳理 五、图片马 1、什么是图片马: 2、.htaccess 3、木马图片 4.   .user.ini扩展

    2024年02月04日
    浏览(51)
  • 一句话画出动漫效果

     链接: AI Comic Factory - a Hugging Face Space by jbilcke-hf Discover amazing ML apps made by the community https://huggingface.co/spaces/jbilcke-hf/ai-comic-factory 选择类型: Japanese  输入提示词: 效果如下:

    2024年02月10日
    浏览(57)
  • 蚁剑连接一句话木马演示

    需要准备 一台虚拟机作为服务器,一台作为攻击机(可用主机),将虚拟机的网络都设置为桥接。 我这里服务器用win2008R2系统 攻击机用win10 接下来我会演示 php 的一句话木马 其他脚本语言的一句话木马使用过程和这个差别不大 在服务器上安装phpstudy 快速搭建服务器 安装成

    2024年02月14日
    浏览(49)
  • 文件上传漏洞—一句话图片马制作

    提要 :在文件上传漏洞中,通常需要上传脚本类型的文件至服务端执行,获取WebShell,但是网站会严格过滤脚本类型的文件,这个时候便可以通过图片马来尝试突破。 简介 :在图片格式文件(JPG,PNG和GIF等)中添加隐藏一句话木马,利用文件包含漏洞,Web容器解析漏洞和.

    2024年02月07日
    浏览(52)
  • 解封ChatGPT我只用了一句话

    文章前言 ChatGPT作为一个AI语言模型可以帮助使用者生成各种各样的文字内容,目前已被广泛应用于各种语言任务中,例如:文本生成、机器翻译、问答系统等,基于保障使用者权益和维护良好的价值观,官方限制ChatGPT不能回答不当言论(攻击或侮辱性)、敏感内容和带有偏见的

    2024年02月16日
    浏览(39)
  • 渗透干货|史上最全一句话木马

    PHP //可执行命令一句话 普通一句话 PHP系列 过狗一句话 【----帮助网安学习,以下所有学习资料文末免费领!----】 几个变性的php–过防火墙 过狗效果都不错: 密码-7 phpv9 高版本拿shell ASP asp 一句话 ASP过安全狗一句话 ASPX系列 ASPX一句话的 过安全狗效果不怎么样 不过我认为能

    2024年04月25日
    浏览(45)
  • 一句话解释什么是出口IP

    出口 IP 是指从本地网络连接到公共互联网时所使用的 IP 地址。这个 IP 地址是由 Internet 服务提供商(ISP)分配给你的,它可以用来标识你的网络流量的来源。如果你使用的是 NAT(网络地址转换)技术,则在 NAT 设备内部会进行地址转换,使得多个设备可以共享同一个公共 I

    2024年02月08日
    浏览(42)
  • java安全——jsp一句话木马

    提示:以下是本篇文章正文内容,下面案例可供参考 http://localhost:8003/index.jsp?cmd=whoami 不会回显执行的结果只能在后台打印一个地址,常用来反弹shell 代码如下(示例):

    2024年02月11日
    浏览(48)
  • 一句话介绍大数据各种名词及其特点

    大数据 :传统PC无法处理的。数据大、数据类型繁多、处理速度快、价值密度低。 Hadoop :能够对大数据进行分布式处理的软件框架、这种处理具有高效、可靠、可伸缩的特点。Hadoop的特点:高效率、高可靠、高容错、高可拓展。成本低、Linux运行支持多语言。 SSH :建立在应用

    2024年02月03日
    浏览(39)
  • 【AI绘画】给我一句话,送你一幅画。

    什么是AI绘画 通俗的说,AI绘画就是AI通过学习训练出自己的思考模型,然后绘画。 AI绘画优劣势 你可以把AI理解为一个天赋非凡的外国绘画神童 优势 (效率高) 天赋非凡 :绘画的速度非常快,效率非常高,图片也很精美 不足 (理解局限) 外国 :相对国内而言,训练模型

    2024年02月09日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包