首页 > 其他分享 >C语言 【句子倒叙】

C语言 【句子倒叙】

时间:2024-10-29 15:47:57浏览次数:8  
标签:arr right cur 倒叙 C语言 char 句子 left

        在学期C语言前期,经常会遇到一个经典的题目:倒序字符串。这个题目利用指针可以很简单地得到解决。句子倒叙需要用到这个思想,在正式句子倒叙之前我们先来倒叙字符串。

#include <stdio.h>

void reverse(char* arr,char* right)
{
	char* left = arr;
	while (left < right)
	{
		char temp = *left;
		*left = *right;
		*right = temp;
		left++;
		right--;
	}
}

int main()
{
	char arr[100];
	gets(arr);//接受空格输入
	printf("Orignal:%s\n", arr);
	int len = strlen(arr);
	char* end = arr + len - 1;
	reverse(arr, end);
	printf("After reverse:%s\n", arr);
	
	return 0;
}

        这里进行输入输出测试:输入hello world!输出结果为:

        那么对于句子倒叙这个题目来说,假设输入:hello world! 输出:world!hello  句子中的单词位置发生倒叙,而单词本身不发生倒叙,那么我们可以先将整个字符串进行倒叙,然后将每一个单词再次进行倒叙,就会达到题目要求的效果。基于上面的倒叙函数,我们现在问题就是分割每一个单词,然后调用reverse函数,传入的指针应该为:单词起始位置的指针和结束位置的指针。

#include <stdio.h>

void reverse(char* arr,char* right)
{
	char* left = arr;
	while (left < right)
	{
		char temp = *left;
		*left = *right;
		*right = temp;
		left++;
		right--;
	}
}

int main()
{
	char arr[100];
	gets(arr);//接受空格输入
	printf("Orignal:%s\n", arr);
	int len = strlen(arr);
	char* end = arr + len - 1;
	reverse(arr, end);
	//分割每一个单词并进行倒叙
	char* cur = arr;//记录当前位置

	while (*cur)
	{
		char* left = cur;//记录单词起始位置
		while (*cur != ' ' && *cur != '\0')
			cur++;
		reverse(left, cur - 1);//循环结束cur指向'\0'
		if (*cur != '\0')//句子结束时,cur停止加1
			cur += 1;
	}
	printf("result:%s\n", arr);
	return 0;
}

         运行结果:

标签:arr,right,cur,倒叙,C语言,char,句子,left
From: https://blog.csdn.net/qq_70199082/article/details/143330962

相关文章

  • c语言-数组队列-学习笔记
    数组队列#include<stdio.h>#include<stdlib.h>/*数组顺序队列*/typedefstructSqQueue{ intdata[10]; intfront; intrear;}SqQueue;voidInitQueue(SqQueue*Q){ Q->front=Q->rear=0;}voidEnQueue(SqQueue*Q,inta){ Q->data[Q->rear......
  • 在C语言中进行网络编程时,有哪些辅助工具可用
    标题:在C语言中进行网络编程时,有哪些辅助工具可用?在C语言中进行网络编程时,可用的辅助工具包括套接字库(如Winsock、BSDSockets)、协议库(如OpenSSL)、网络调试工具(如Wireshark)、以及集成开发环境(如Eclipse、VisualStudio)。这些工具为开发者提供了强大的支持,使得在C语言中进行网络编......
  • C语言:程序代码与文件的羁绊
    目录为什么使用文件文件认识程序文件数据文件文件名⼆进制文件和文本文件文件的打开和关闭流标准流文件指针文件操作符详解文件的操作:参数解释:文件操作符示例文件的打开与关闭读取文件字符串读取数据块写入数据块重定位文件指针获取指针位置文件指针移到开始处清除文......
  • 基于EasyX图形化编程[C语言]
    EasyX是针对C/C++的图形库,可以帮助使用C/C++语言的程序员快速上手图形和游戏编程。本期介绍如何用EsayX进行图形化编程,代码辅助介绍#include<stdio.h>#include<easyx.h>#include<mmsystem.h>#pragmacomment(lib,"winmm.lib")//包含库文件intmain(){ //一,创建窗......
  • 线性表-单链表c语言实现
    一、基本介绍    回顾单链表的知识二、单链表#include<stdio.h> #include<cstdlib>typedefintElemType;typedefintStatus; #defineERROR0#defineOK1#defineOVERFLOW-2#defineNULL0//定义单链表中结点类型 typedefstructLNode{  ......
  • C语言教学——编程基础与C语言入门
    引言在上一篇中,我们介绍了计算机的基本组成和工作原理。本篇文章将深入探讨编程的基本概念,特别是C语言的特性和基本语法,帮助初学者更好地理解如何编写程序。我们将从编程语言的分类入手,逐步引导读者进入C语言的世界。1.编程的定义编程是指通过编写代码来创建计算机程序的过......
  • 网络编程 Linux环境 C语言实现
    进程间通信的延续跨电脑进程间通信一、远程通信方式电路交换------老式有线电话通信​报文交换​分组交换支持分时机制的(分片机制)报文交换​现行网络大部分都是采用分组交换形式二、网络&互联网&因特网网络Network:多台计算机通过某种传输介质连接在一起形成......
  • 水仙花数c语言程序:实操解答
    水仙花数(Narcissisticnumber)是指一个三位数,其各个位上数字的立方和等于该数本身。比如153就是水仙花数,因为\(1^3+5^3+3^3=153\)。以下是一个C语言程序,用于判断一个三位数是否为水仙花数,并输出100到999范围内的所有水仙花数:```c#include<stdio.h>#include<math.h>......
  • C语言和Rust在安全性特性上的区别
    #C语言和Rust在安全性特性上的区别在探讨C语言和Rust在安全性特性上的区别时,我们可以明确地指出几个核心观点:Rust提供了内存安全保证、并发安全、以及错误处理机制,这些特性在编译时就能够避免许多常见的错误类型,显著提高了软件的安全性和可靠性。其中,内存安全保证是Rust最为突......
  • C语言和Groovy在JVM兼容性上的区别
    ##C语言和Groovy在JVM兼容性上的区别在探讨C语言和Groovy在JVM(Java虚拟机)兼容性上的差异时,核心观点可以概括为:C语言不直接兼容JVM、Groovy与JVM高度兼容。C语言是一种通用的、过程式的编程语言,它直接编译为机器语言,执行效率高,但它并不直接兼容JVM,这是因为JVM是为运行Java字节码......