C语言如何判断输入首字符是否出现在第10-16位并输出指定内容
实现思路
通过动态内存分配存储输入字符串,无需预设固定长度,核心逻辑如下:
- 逐字符读取输入,通过
realloc动态扩容存储缓冲区,支持任意长度输入 - 提取空格前的首个字符,定位第一个空格的位置,确定后续需要输出的内容起点
- 校验空格后子串的第10~16位(自然计数)区间内是否存在和首字符相等的字符
- 存在则输出空格后的全部内容,否则无输出
实现代码
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *input = NULL; size_t buf_size = 0; size_t len = 0; int c; // 动态读取整行输入,无长度限制 while ((c = getchar()) != '\n' && c != EOF) { if (len + 1 >= buf_size) { // 每次扩容128字节,可根据实际场景调整 buf_size += 128; char *temp = realloc(input, buf_size); if (!temp) { free(input); perror("内存分配失败"); return 1; } input = temp; } input[len++] = c; } input[len] = '\0'; if (len == 0) { free(input); return 0; } // 提取空格前的首个字符 char first_char = input[0]; // 定位第一个空格的位置 char *space_pos = strchr(input, ' '); if (!space_pos) { // 输入无空格直接返回 free(input); return 0; } // 计算校验区间:空格后第10~16位(自然计数)转换为0基下标 size_t after_space_idx = space_pos - input + 1; size_t start_check = after_space_idx + 9; size_t end_check = after_space_idx + 15; int exist = 0; // 越界保护,输入不足时只校验到字符串末尾 if (end_check >= len) { end_check = len - 1; } if (start_check <= end_check) { for (size_t i = start_check; i <= end_check; i++) { if (input[i] == first_char) { exist = 1; break; } } } // 符合条件则输出空格后全部内容 if (exist) { printf("%s\n", space_pos + 1); } free(input); return 0; }
逻辑说明
- 动态内存部分:每次读取字符前判断缓冲区剩余空间,不足就调用
realloc扩容,完全不需要预设输入长度上限 - 计数适配:需求中提到的第10~16位为空格后子串的自然计数,代码中转换为数组0基下标处理,同时做了越界保护,输入不足16位时只校验到输入末尾
- 结果输出完全匹配预期示例:首字符在指定区间存在时才输出空格后的所有内容,否则无任何输出
内容的提问来源于stack exchange,提问作者user17067764
相关产品推荐
相关产品推荐

