栈实现回文
分数 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 是一个非常有用的函数,尤其是在需要从用户获取字符串输入时,它的使用可以有效地避免常见的错误,如缓冲区溢出。