首页 > 其他分享 >栈实现回文

栈实现回文

时间:2024-10-22 18:01:00浏览次数:1  
标签:读取 实现 fgets printf 字符串 输入 回文

栈实现回文
分数 15
作者 liudan
单位 石家庄铁道大学
输入一个字符串,判断该字符串是否为回文。回文就是字符串中心对称,从左向右读和从右向左读的内容是一样的。(不含空格)

输入格式:
先输入字符串的长度,不超过100个字符长度,回车,然后依次输入字符,以回车结束字符串输入。

输出格式:
如果输入字符串中含空格,则输入字符串后回车,显示"入栈不成功",若字符串无空格,回车后,若是回文,则输出"此字符串是回文串",否则输出"此字符串不是回文串"。

输入样例:
在这里给出一组输入。例如:

5
12321
输出样例:
在这里给出相应的输出。例如:

此字符串是回文串

include <stdio.h>

include <stdlib.h>

include <string.h> // 引入字符串处理库

define MAXSIZE 100

// 结构体定义
struct Stack {
char world[MAXSIZE];
int top;
};

// 定义栈
struct temp {
struct Stack s;
};

int main() {
int max = 0;

// 读取最大字符串长度
printf("请输入字符串的长度(不超过100个字符): ");
if (scanf("%d", &max) != 1 || max <= 0 || max > MAXSIZE) {
    printf("输入无效\n");
    return 0; // 输入错误,退出程序
}

// 初始化栈
struct Stack s;
s.top = -1; // 将栈顶初始化为 -1 表示空栈

// 入栈
char c1[MAXSIZE] = {'0'};
getchar(); // 清除输入缓冲区中的换行符

printf("请输入字符(以回车结束): \n");
fgets(c1, max + 1, stdin); // 读取字符串,最多读取 max 个字符

// 检查输入的每个字符
for (int i = 0; i < max; i++) {
    char c = c1[i];

    // 判断是否为空格
    if (c == ' ') {
        printf("入栈不成功,字符串中包含空格\n");
        return 0;
    }

    // 判断是否换行
    if (c == '\n') {
        break; // 退出循环
    }

    // 入栈
    s.world[++(s.top)] = c; 
}

// 出栈并判断回文
int t = 0;
for (int i = 0; i < s.top + 1; i++) { // 使用有效的栈大小
    if (s.world[s.top - i] == c1[i]) {
        t++;
    }
}

// 判断回文
if (t == s.top + 1) {
    printf("此字符串是回文串\n");
} else {
    printf("此字符串不是回文串\n");
}

return 0;

}

fets:
fgets 是 C 语言中的一个标准输入函数,用于从指定的输入流中读取一行文本。它的用法可以帮助你安全地读取字符串,避免缓冲区溢出。以下是 fgets 函数的基本语法及用法说明:

函数原型
c
char *fgets(char *str, int n, FILE *stream);
参数说明
char *str: 指向一个字符数组(字符串),用于存储读取的内容。
int n: 读取的最大字符数,包括末尾的空字符('\0')。这意味着如果你希望读取的字符串长度为 max,那么你应该传入 max + 1 作为参数,以确保可以存储字符串结束符。
FILE *stream: 指定输入流,通常使用 stdin 表示标准输入。
返回值
fgets 返回 str 的指针,如果读取失败或到达文件末尾,则返回 NULL。
用法示例
下面是一个简单的例子,展示了如何使用 fgets 读取用户输入的字符串:

c

include <stdio.h>

int main() {
char buffer[100]; // 创建一个字符数组用于存储输入
printf("请输入一行文本: ");

// 使用 fgets 读取一行文本
if (fgets(buffer, sizeof(buffer), stdin) != NULL) {
    printf("您输入的文本是: %s", buffer); // 输出读取到的文本
} else {
    printf("读取失败\n"); // 处理读取失败的情况
}

return 0;

}
注意事项
读取换行符: fgets 会将用户输入的换行符('\n')也读入到字符串中,这与 scanf 的行为不同,scanf 在读取字符串时会忽略空白字符(包括换行符)。

字符串结尾: fgets 会自动在字符串末尾添加空字符('\0'),以确保字符串的正确终止。

安全性: 使用 fgets 相比于 gets 函数更加安全,因为 gets 不会检查输入长度,容易导致缓冲区溢出。

错误处理: 在使用 fgets 后,应该检查返回值,以判断是否成功读取了数据。

结论
fgets 是一个非常有用的函数,尤其是在需要从用户获取字符串输入时,它的使用可以有效地避免常见的错误,如缓冲区溢出。

标签:读取,实现,fgets,printf,字符串,输入,回文
From: https://www.cnblogs.com/LiuHuWei/p/18493434

相关文章

  • 八重回文划分法:最多/最少 回文/非回文 子序列/子串 划分
    只考虑常数字符集,所以关于字符集的复杂度都没算进来。最少非回文子串划分答案是\(1\)或\(2\)或者无解,参考CF1951E的题解。时间复杂度:\(\mathcalO(n)\)。最少非回文子序列划分考虑最少非回文子串划分的情况,可以发现答案是\(2\)的情况也不可能划分成\(1\)个子序列,所......
  • 线程池实现原理及实践
    线程池的总体设计ThreadPoolExecutor实现的顶层接口是Executor,顶层接口Executor提供了一种思想:将任务提交和任务执行进行解耦。用户无需关注如何创建线程,如何调度线程来执行任务,用户只需提供Runnable对象,将任务的运行逻辑提交到执行器(Executor)中,由Executor框架完成线程的调配......
  • 组件封装-双el-select联动搜索-实现方案&经验分享
    前情提要:    最近业务中需要实现产品与设备的联动搜索功能,需要两个el-select框,并且每个Select框是支持筛选的,毕竟设备和产品数量较多。这个功能在之前迭代的模块中实现过,但是并没有封装成为组件,现在要开发一个新的业务,其中”产品+设备“的联动搜索效果应用场景还有很......
  • 星际迷航:人类距离实现太空旅行还有多远?
    内容概要人类的太空旅行梦,仿佛是一颗璀璨的星星,高悬于夜空,既让人憧憬,又充满了不确定性。为了更接近这颗星星,科学家们不断探索各类理论,其中最引人注目的便是曲速飞行。这种飞行方式据说可以让宇宙飞船在不触犯光速限制的情况下,快速穿越浩瀚星际,仿佛给旅行者装上了一双隐形的翅......
  • 使用 C++ 实现网络编程 NetWork(pro版)
    上一次小编分享了C++实现网络编程NetWork,这是链接:C++网络通信类Network的实现详解-CSDN博客这次小编带着改进之后的NetWork归来!在现代计算机网络中,网络通信是不可或缺的一部分。本文将介绍如何使用C语言实现一个简单的网络通信库,涵盖TCP和UDP协议的基本功能。我们将通过......
  • (开题报告)django+vue酸奶配送管理系统的设计与实现论文+源码
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于酸奶配送管理系统的研究,现有研究主要以一般性的物流配送或食品配送管理系统为主,专门针对酸奶配送管理系统的研究较少。在国内外的......
  • C#实现将汉字转换成拼音
    使用winformnuget:页面:俩TextBox控件后台:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Text.RegularExpressions;usingSystem.Threa......
  • SpringBoot搭建webSocket长链接,实现双向实时通信
    很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数......
  • 数字IC后端实现Innovus |给各种IP子模块添加port buffer和antenna diode万能脚本
    我们之前分享过在hierarchicalflow后端实现中为了确保顶层flatten时timingsignoff和physicalsignoff看到的情况和模块级看到的情况一致,我们会在模块ioport添加ioportbuffer(主要是timing,antenna一致性)。实际上在芯片级我们还会给各大子模块Block和IP的接口添加buffer。......
  • Python 学生管理系统实现与详解
            在当今数字化的时代,学生管理系统对于学校和教育机构来说至关重要。它可以帮助管理人员高效地处理学生信息,提高工作效率。本文将详细介绍一个使用Python实现的学生管理系统,并对其代码进行深入分析。一、项目背景与需求        学生管理系统是为了......