字符串分隔

 

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 }

 

 

 

posted @ 2019-06-19 21:19  Crystal_Guang  阅读(325)  评论(0编辑  收藏  举报