写一个c的程序,要求输入一串字符串存入字符串指针,之后将这串字符串拆分为三段存入数组s1,s2,s3中
时间: 2024-09-22 21:03:53 浏览: 61
好的,这里有一个C程序示例,它首先要求用户输入一串字符串,然后将其分割成三个部分,并存储到三个不同的字符数组中。假设我们允许用户通过空格分隔字符串:
```c
#include <stdio.h>
#include <stdlib.h> // 包含内存管理函数,如malloc()
#define MAX_SEGMENTS 3
#define MAX_CHAR_PER_SEGMENT 50 // 每个子字符串最大长度
// 分割字符串的函数
void split_string(char** segments, const char* input) {
char temp[MAX_CHAR_PER_SEGMENT + 1]; // 临时缓冲区
int count = 0;
// 遍历输入字符串,遇到空格就截取到临时缓冲区并分配新的字符串
for (char* it = strtok(input, " "); it != NULL; it = strtok(NULL, " ")) {
strncpy(temp, it, MAX_CHAR_PER_SEGMENT); // 将部分字符串复制到临时缓冲区
temp[MAX_CHAR_PER_SEGMENT] = '\0'; // 添加终止符
if (count >= MAX_SEGMENTS) {
fprintf(stderr, "Too many segments requested. Only %d allowed.\n", MAX_SEGMENTS);
free(segments[count - 1]); // 回收多余的内存
return; // 结束处理
}
segments[count] = (char*)malloc(strlen(temp) + 1); // 动态分配空间
strcpy(segments[count], temp); // 复制字符串到分配的内存
count++;
}
}
int main() {
char* s1, *s2, *s3; // 分别存放三段字符串
char input[200]; // 用户输入的字符串
printf("Please enter a string to be split: ");
fgets(input, sizeof(input), stdin); // 获取用户输入,包括换行符
input[strlen(input) - 1] = '\0'; // 移除换行符
split_string(&s1, &input); // 分割字符串
split_string(&s2, s1); // 继续分割剩余的部分
split_string(&s3, s2);
// 打印结果
printf("s1: %s\n", s1);
printf("s2: %s\n", s2);
printf("s3: %s\n", s3);
// 释放所有动态分配的内存
free(s1);
free(s2);
free(s3);
return 0;
}
```
在这个程序中,用户需要提供不超过`MAX_SEGMENTS * MAX_CHAR_PER_SEGMENT`个字符的输入。注意,由于字符串是动态分配的,所以在完成操作后必须记得释放内存。
阅读全文