字符串分隔
eg:
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <string.h> 4 5 typedef struct t { 6 char a[102]; 7 }T; 8 9 void do_printf(const char * src, int n) 10 { 11 char a[9] = { 0 };//为了让最后一个元素为'\0'(即ASCII码为0),\ 12 选择初始化了的包含9个元素的数组作为缓冲区 13 int len; 14 if (n == 0 || src == NULL) return; 15 16 if ((len = n % 8) == 0)//输入字符数要以8的倍数为单位,故只有能否整除两个分支 17 { 18 for (int i = 0; i < n / 8; i++)//能够整除 19 { 20 for (int i = 0; i < 8; i++) 21 { 22 a[i] = *src++;//填充8字节,最后一个字节为数组a的最后一个元素'\0' 23 } 24 printf("%s\n", a); 25 } 26 } 27 else 28 { 29 for (int i = 0; i < n / 8; i++)//不能够整除,先把能整分为8份的按照8字节打印 30 { 31 for (int i = 0; i < 8; i++) 32 { 33 a[i] = *src++; 34 } 35 printf("%s\n", a); 36 } 37 38 for (int i = 0; i < len; i++)//对8求余为len,则需要填充len个字节 39 { 40 a[i] = *src++; 41 } 42 43 for (int i = len; i < 8 ; i++)//由于不能整除,还需要填充8-len个'0' 44 { 45 a[i] = '0'; 46 } 47 printf("%s\n", a); 48 49 } 50 51 } 52 /* Q:最大输入100个字符,为什么我的数组缓冲区需要102个字节? 53 A:fgets读取的数据是输入参数-1,输入参数为102,最大读取为101,由于fgets 54 会读取最后的换行符(\n),所以当题目要求最大输入为100个字符时,加上最后 55 的换行符(\n)就有101个字符了,所以最后选择102大小的缓冲区*/ 56 int main(void) 57 { 58 T arry[2]; 59 int len1,len2; 60 61 fgets(arry[0].a, 102, stdin); 62 len1=strlen(arry[0].a);//fgets会自动在缓冲区后面加上'\0' 63 64 fgets(arry[1].a, 102, stdin); 65 len2 = strlen(arry[1].a); 66 67 do_printf(arry[0].a,len1-1);//排除fgets吸收的换行符(\n),故len需要减去1 68 do_printf(arry[1].a, len2 - 1); 69 70 return 0; 71 }
欢迎加入作者的小圈子
扫描下方左边二维码加入QQ交流群,扫描下方右边二维码关注个人微信公众号并获取更多隐藏干货,QQ交流群:816747642 微信公众号:Crystal软件学堂
作者:Crystal软件学堂 bilibili视频教程地址:https://space.bilibili.com/5782182 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在转载文章页面给出原文连接。 如果你觉得文章对你有所帮助,烦请点个推荐,你的支持是我更文的动力。 文中若有错误,请您务必指出,感谢给予我建议并让我提高的你。 |