字符串分隔

 

eg:c++

 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 }

 

 

相關文章
相關標籤/搜索