01串的切割
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LEN 1000
#define MAX_CUTS 100
typedef struct {
int cut_number;
int length;
char *content;
} CutResult;
int main() {
char str[MAX_LEN];
CutResult results[MAX_CUTS];
int total_cuts = 0;
printf("请输入只包含0和1的字符串: ");
scanf("%s", str);
char *current_ptr = str;
int remaining = strlen(str);
int cut_length = 1;
printf("\n切割过程:\n");
while (remaining > 0 && total_cuts < MAX_CUTS) {
// 检查剩余长度是否足够切割
if (cut_length > remaining) {
break;
}
// 分配内存存储切割结果
results[total_cuts].content = (char *)malloc(cut_length + 1);
results[total_cuts].cut_number = total_cuts + 1;
results[total_cuts].length = cut_length;
// 复制切割内容
strncpy(results[total_cuts].content, current_ptr, cut_length);
results[total_cuts].content[cut_length] = '\0';
printf("第%d次: 长度=%d, 内容=%s\n",
results[total_cuts].cut_number,
results[total_cuts].length,
results[total_cuts].content);
// 更新指针和剩余长度
current_ptr += cut_length;
remaining -= cut_length;
total_cuts++;
// 更新下一次切割的长度
cut_length++;
if (cut_length > 10) {
cut_length = 1;
}
}
printf("\n=== 切割结果 ===\n");
printf("有效切割次数: %d\n", total_cuts);
printf("剩余字符串: %s\n", current_ptr);
printf("剩余长度: %d\n\n", remaining);
printf("所有切割出来的字符串:\n");
for (int i = 0; i < total_cuts; i++) {
printf("第%d次: %s (长度=%d)\n",
results[i].cut_number,
results[i].content,
results[i].length);
}
// 释放内存
for (int i = 0; i < total_cuts; i++) {
free(results[i].content);
}
return 0;
}
输入一个只包含0和1的字符串str,比如(1010101010)按照如下规则从头开始切割: 第1次 切掉长度为1的字符串,(切掉1,剩下 010101010) 第2次 从剩余串里切掉长度为2的字符串, (切掉01,剩下0101010) 第3次 从剩余串里切掉长度为3的字符串, (切掉010,剩下1010) ... 第10次 从剩余串里切掉长度为10的字符串, 第11次切得长度又回到1,从剩余串里 切掉长度为1的字符串 依次类推,当要切的字符串长度 大于 剩余的字符串长度时,停止切割(剩余长度不足时,不计数) 输出:可以切出来的有效数据的个数,并输出每次切出来的值。
查看6道真题和解析