c语言多行输入,每行一个字符串 s ; 保证字符串 s 的长度 len 满足 1≤len≤1000 ,保证输入的字符串总数 n 满足 20≤n≤105 ; 字符串仅包含可见字符。
时间: 2024-09-12 19:03:02 浏览: 41
c语言面试题之哈希表字符串中的第一个唯一字符.zip
在 C 语言中,处理多行输入并存储每个字符串作为单个数组可以使用 while 循环结合 fgets 函数。由于内存限制,我们可以先读取一行,然后检查其长度是否在允许范围内,接着将它追加到动态分配的字符串数组中。这里是一个示例代码片段:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LENGTH 1000
#define STRING_ARRAY_SIZE 100000 // 可能需要根据实际情况调整大小
// 动态数组用于存储字符串
char** string_array;
size_t num_strings = 0;
void input_strings() {
char line[MAX_LINE_LENGTH];
// 遍历直到用户结束输入
while (fgets(line, sizeof(line), stdin)) {
size_t len = strlen(line);
// 检查长度是否在范围之内
if (len <= MAX_LINE_LENGTH && num_strings < STRING_ARRAY_SIZE) {
// 动态分配内存存储新字符串
string_array = realloc(string_array, (num_strings + 1) * sizeof(char*));
string_array[num_strings] = malloc(len + 1); // 加1是因为要包括'\0'
strncpy(string_array[num_strings], line, len);
string_array[num_strings][len] = '\0'; // 添加字符串结束符
num_strings++;
} else {
printf("超过最大输入限制,已停止接收。\n");
break;
}
}
// 释放未使用的内存
for (size_t i = 0; i < num_strings; i++) {
free(string_array[i]);
}
free(string_array);
}
int main() {
string_array = malloc(MAX_LINE_LENGTH * sizeof(char*)); // 初始分配足够大的空间
input_strings();
// 现在可以在string_array里访问输入的字符串了
// ...
return 0;
}
```
阅读全文