C语言入门(字符串正反连接(fgets()、gets()用法))

2023-12-19 07:28

本文主要是介绍C语言入门(字符串正反连接(fgets()、gets()用法)),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

​编辑

题目描述

输入格式

输出格式

样例输入

样例输出

解题思路


题目描述

所给字符串正序和反序连接,形成新串并输出

输入格式

任意字符串(长度<=50)

输出格式

字符串正序和反序连接所成的新字符串

样例输入

123abc

样例输出

123abccba321

解题思路

输入字符串,把它的逆序字符串存放在原字符串后面,然后输出;

注意事项:
放在原字符串后面时,要从第lenth-1的位置开始放,直到原字符串第一个字符放入为止;

即:

for( i=strlen(a),j=strlen(a)-1; j>=0; i++,j--)
{a[i]=a[j];
}

最后要加上' \0';

有一种的思路是,循环不是以原字符串第一个字符结束,而是以原字符串长度的两倍-1结束,

即:(下面这样是不对的,因为a[ strlen(a) ]原来是' \0', 被放字符后,求出长度不对,并且a的长度在改变)

for( i=strlen(a),j=strlen(a)-1; i<2*strlen(a); i++,j--)
{a[i]=a[j];
}

代码示例:

#include <stdio.h>
#include <string.h>
int main()
{char a[101];int i, j = 1;gets(a);for(i = strlen( a ), j = strlen( a ) - 1; j >= 0; i++, j--){a[i] = a[j];}a[i] = '\0';puts(a);return(0);
}

        对于上述代码,我们可以再dev C++中正常运行,但是如果我们将该代码放到Visual Studio中进行编辑,会发现

    gets(a);

报错,这是因为在C语言中,gets(a)用于从标准输入(键盘)获取一行字符串,并将其保存到字符数组a中。它是一个不安全的函数,因为它无法防止输入的字符串超过目标字符数组的大小,可能导致缓冲区溢出。由于gets()存在安全性问题,它已被标记为不推荐使用,并在C11标准中被移除。

使用gets(a)时,需要注意以下几点:

  1. 字符数组a必须足够大以容纳输入的字符串,包括字符串的结尾空字符\0
  2. 如果输入的字符串长度超过了字符数组的大小,会发生缓冲区溢出,导致未定义的行为。
  3. gets()函数不提供任何限制或验证输入的能力,因此要确保输入的字符串长度不会超过目标字符数组的大小。

        在现代C编程中,推荐使用更安全的函数fgets()替代gets(),因为fgets()可以指定最大读取的字符数,避免缓冲区溢出问题。

  fgets()函数用于从输入流中读取一行字符串,并将其保存到指定的字符数组中。它提供了更安全的方式来读取字符串,因为你可以指定最大读取的字符数,避免缓冲区溢出问题。

fgets()函数的原型如下

char* fgets(char* str, int num, FILE* stream);

参数说明:

  • str:指向目标字符数组的指针,用于保存读取的字符串。
  • num:要读取的最大字符数(包括结尾的换行符和空字符)。
  • stream:要读取的输入流,通常使用stdin表示标准输入。

  fgets()函数的返回值是一个指向目标字符数组的指针,如果读取成功,则返回str;如果发生错误或到达文件末尾,则返回NULL

#include <stdio.h>
#include <string.h>
int main()
{char a[101];int i, j = 1;fgets(a, sizeof(a), stdin);for (i = strlen(a), j = strlen(a) - 1; j >= 0; i++, j--){a[i] = a[j];}a[i] = '\0';puts(a);return(0);
}

        不过在使用fgets()我们又会发现,最终结果成这样

        那是因为fgets()函数将包括换行符\n在内的输入一并读取到字符数组中,因此如果你想去掉换行符,可以使用字符串处理函数strcspn()或手动处理字符串。

最终代码:

#include <stdio.h>
#include <string.h>
int main()
{char a[101];int i, j = 1;fgets(a, sizeof(a), stdin);// 去掉换行符a[strcspn(a, "\n")] = '\0';for (i = strlen(a), j = strlen(a) - 1; j >= 0; i++, j--){a[i] = a[j];}a[i] = '\0';puts(a);return(0);
}

Visual Studio编辑器中C4996 ‘scanf‘: This function or variable may be unsafe.问题解决方案-CSDN博客

C语言练习(检查一个数是否为质数 、剪绳子)-CSDN博客

这篇关于C语言入门(字符串正反连接(fgets()、gets()用法))的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/511356

相关文章

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.