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的字符串 依次类推,当要切的字符串长度 大于 剩余的字符串长度时,停止切割(剩余长度不足时,不计数) 输出:可以切出来的有效数据的个数,并输出每次切出来的值。