倒置英文句子(仅将单词位置倒置) C语言

2024-01-04 16:58

本文主要是介绍倒置英文句子(仅将单词位置倒置) C语言,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,即将句子中的单词位置倒置,而不改变单词内部结构.

运用到了栈
定义一个存放字符串首地址的栈
先将每个单词从语句中分离开来,然后入栈
全部入栈完毕后,开始出栈,然后拼接字符串即可。

核心函数为strtok_r(str, " ", save_str);
char *strtok_r(char *str, const char *delim, char **saveptr); //(linux)
windows下为strtok_s
第一个参数,要修改的字符串的首地址,第二个参数,分隔符,即按分隔符分离字符串,第三个参数,分割后的字符串剩余部分的首地址

具体注释已在代码中给出,若有不理解的地方,可以评论区留言或者私信,我会尽快回复

/** 将一个字符串中* 单词的位置倒置*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 20
char* str_popstack();   	//字符串出栈函数
void str_pushstack(char* str);	//字符串压栈函数
int str_ptr = -1;     //栈顶元素指针
char *str_stack[MAXSIZE];  //字符串栈,存放每个字符串首地址
char* word_swap(char* str, int length);   //核心方法,将一个句子中的单词倒置
int main()
{char str[100];int length;printf("请输入一个字符串:");fgets(str, 100 ,stdin);length = strlen(str);if (length > 0 && length < 99)  //当字符串长度小于99时,fgets自动在\0前添加\n,删除\n{str[length - 1] = 0;length--;}printf("输入的字符串:");puts(str);strcpy(str, word_swap(str, length));printf("单词倒置后的字符串:");puts(str);return 0;
}
char* word_swap(char* str, int length)
{char* result_str = (char*)malloc(100 * sizeof(char));char* c_str;   //存放strtok_r函数截断字符串后的首地址char* tmp;	//间接作用指针char** save_str = &tmp;		//二级指针,作为strtok_r函数的第三个参数,存放截断后剩余字符串的首地址c_str = strtok_r(str, " ", save_str);while (c_str)   //把字符串按分隔府分成一段一段,直到结尾为止{puts(c_str);str_pushstack(c_str);     //分隔出来的字符串入栈c_str = strtok_r(*save_str, " ", save_str);   //按分隔符截断剩余部分字符串}//while循环过后,字符串中的每个单词已入栈,现在开始出栈拼接while (str_ptr != -1){strcat(result_str, str_popstack());if (str_ptr != -1)   //最后一个单词后不加空格strcat(result_str, " ");}return result_str;}	
void str_pushstack(char* str)  //字符串压栈方法
{if (str_ptr > MAXSIZE){printf("栈已满!\n");return;}str_stack[++str_ptr] = str;printf("入栈成功,入栈字符串为:%s\n", str);
}
char* str_popstack()   //字符串出栈方法
{char *str;if (str_ptr < 0){printf("栈已空!\n");return 0;}str = str_stack[str_ptr--];printf("出栈成功,出栈字符串为%s\n", str);return str;
}

运行截图:
在这里插入图片描述

这篇关于倒置英文句子(仅将单词位置倒置) C语言的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/569984

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引发了我们的广泛关注。从训练和操作的角度来看,LLMs 可以被认为是一种巨大的、非真实的记忆库,相当于为我们所有人提供了一个外部的系统 1(见图 1)。然而,它们表面上的多功能性让许多研究者好奇,这些模型是否也能在通常需要系

chart 完成拓扑图单节点拖拽不影响其他节点位置

就是做这种的功能,箭头原本是可以动态重复移动的,但不知道哪里问题导致没箭头了,然后补了个edgeSymbol: ['','arrow'], 字段,才增加了箭头。 拖拽某个节点,只有关联到的线条会跟着变动其他的节点位置不变。 参考 https://gallery.echartsjs.com/editor.html?c=x8Fgri22P9 https://echarts.baidu.com/exa

人工和AI大语言模型成本对比 ai语音模型

这里既有AI,又有生活大道理,无数渺小的思考填满了一生。 上一专题搭建了一套GMM-HMM系统,来识别连续0123456789的英文语音。 但若不是仅针对数字,而是所有普通词汇,可能达到十几万个词,解码过程将非常复杂,识别结果组合太多,识别结果不会理想。因此只有声学模型是完全不够的,需要引入语言模型来约束识别结果。让“今天天气很好”的概率高于“今天天汽很好”的概率,得到声学模型概率高,又符合表达

C语言 将“China”译成密码

将“China”译成密码,密码规律是:用原来的字母后面的第4个字母代替原来的字母。例如,字母“A”后面的第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。编译程序用付赋初值的方法使c1,c2,c3,c4,c5这五个变量的值分别为“C”,“h”,“i”,“n”,“a”,经过运算,使c1,c2,c3,c4,c5分别变成“G”,“l”,“m”,“r”,“e”。分别用put

C语言入门系列:探秘二级指针与多级指针的奇妙世界

文章目录 一,指针的回忆杀1,指针的概念2,指针的声明和赋值3,指针的使用3.1 直接给指针变量赋值3.2 通过*运算符读写指针指向的内存3.2.1 读3.2.2 写 二,二级指针详解1,定义2,示例说明3,二级指针与一级指针、普通变量的关系3.1,与一级指针的关系3.2,与普通变量的关系,示例说明 4,二级指针的常见用途5,二级指针扩展到多级指针 小结 C语言的学习之旅中,二级

剑指offer(C++)--翻转单词顺序列

题目 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? class S

【LinuxC语言】select轮询

文章目录 前言select函数详解selectfd_set类型一个小问题select函数使用步骤改进服务器代码select服务器示例代码 总结 前言 在Linux C语言编程中,我们经常需要处理多个I/O操作。然而,如果我们为每个I/O操作创建一个线程,那么当I/O操作数量增加时,线程管理将变得复杂且效率低下。这就是我们需要select轮询的地方。select是一种高效的I/

拓扑排序——C语言

拓扑排序(Topological Sorting)是一种用于有向无环图(DAG)的排序算法,其输出是图中所有顶点的线性排序,使得对于每条有向边 (u, v),顶点 u 在 v 之前出现。拓扑排序确定了项目网络图中的起始事件和终止事件,也就是顶点的执行顺序。         因为是有向无环图,所以拓扑排序的作用其实就是把先发生的排序在前面,后发生的排序到后面。 例如现在我们有一个

OC和 C语言中的const

const与宏对比 1.都是在其他的地方不可以改变 2.一个地方改了其他的地方都会改变。 而且宏定义的缺陷是, 是它会不断的开辟临时变量的存储空间 使用const的话 是都去使用同一的一份空间,使用同一个对象。 加const 之后变量还是全局的,只不过变为全局常量。 如果此时改变量不想被被类外面访问的话,可以加上static关键字, 3.下次想要定义一些宏的时候分