20190723_C的三个小实现

1. 有一个字符串开头或结尾含有n个空格(“    abcdefgdddd   ”),欲去掉前后的空格,返回一个新的字符串。
a) 要求1:请自己定义一个接口(函数),并实现功能;
b) 要求2:编写测试用例。
c) 函数: int trimSpace(char * inbuf, char * outbuf);

  1 1.    有一个字符串开头或结尾含有n个空格(“    abcdefgdddd   ”),欲去掉前后的空格,返回一个新的字符串。
  2 a)    要求1:请自己定义一个接口(函数),并实现功能;
  3 b)    要求2:编写测试用例。
  4 c)    函数: int trimSpace(char * inbuf, char * outbuf);
  5 
  6 //API函数
  7 #include <stdlib.h>
  8 #include <string.h>
  9 #include <stdio.h>
 10 
 11 #pragma warning(disable:4996)
 12 
 13 /*
 14     子业务函数api
 15 */
 16 
 17 int trimSpace(char* string_input_trim, char* string_output_trim)
 18 {
 19     //判断 业务函数 形参是否为 Null
 20     int returnTrim = 0;
 21     
 22     if (string_input_trim == NULL || string_output_trim == NULL)
 23     {
 24         returnTrim = -1;
 25 
 26         printf("trimSpace error: %d in (string_input_trim == NULL || string_output_trim == NULL)\n", returnTrim);
 27 
 28         return    returnTrim;
 29     }
 30 
 31     //在被调用函数中,定义辅助指针 * 变量,把形参接过来,不要轻易改变被调用函数中的形参值
 32     char* s_i_t = string_input_trim;
 33     char* s_o_t = string_output_trim;
 34     
 35     char* space_cut = ' ';
 36     int i = 0;
 37     int j = 0;
 38 
 39     //裁剪函数,核心算法
 40     //while (s_i_t = strstr(s_i_t, space_cut))
 41     //{
 42 
 43     //}
 44     for (i = 0; i < strlen(s_i_t); i++)
 45     {
 46         if (*(s_i_t + i) != ' ')
 47         {
 48             *(s_o_t + j) = *(s_i_t +i);
 49             j++;
 50         }
 51         else
 52         {
 53             continue;
 54         }
 55 
 56     }
 57 
 58     //这个功能是可以实现的
 59     //for(i = 0; i < strlen(s_i_t); i++)
 60     //{ 
 61     //    printf("%c\n", *(s_i_t + i));
 62     //}
 63 
 64     *(s_o_t + j) = '\0';
 65 
 66     printf("%s\n", s_i_t);
 67     printf("%s\n", s_o_t);
 68 
 69 
 70     //返回值
 71     return returnTrim;
 72 }
 73 
 74 int main_hw01() 
 75 {
 76 
 77     int returnMain = 0;
 78 
 79     char* string_input_main = "     abcdefgdddd      ";
 80     char* string_output_main = (char*)malloc(100);
 81 
 82     //这个功能是可以实现的
 83     /*for (int i = 0; i < strlen(string_input_main); i++)
 84     {
 85         printf("%c", *(string_input_main + i));
 86     }*/
 87 
 88     //returnMain = clientAPI(string_input_main, string_output_main);
 89     returnMain = trimSpace(string_input_main, string_output_main);
 90 
 91     if (returnMain != 0)
 92     {
 93         printf("clientAPI error: %d\n", returnMain);
 94     }
 95     else
 96     {
 97         printf("string after trimming: %s\n", string_output_main);
 98     }
 99 
100     system("pause");
101     return returnMain;
102 }
View Code

2. 有一个字符串 “1a2b3d4z”:
要求写一个函数实现如下功能
a) 把偶数位字符挑出来,组成一个字符串1。
b) 把奇数位字符挑出来,组成一个字符串2。
c) 把字符串1和字符串2,通过函数参数,传给main,并打印。
d) 函数:getStr1Str2(char *source, char* buf1, char *buf2);

  1 //API函数
  2 #include <stdlib.h>
  3 #include <string.h>
  4 #include <stdio.h>
  5 
  6 #pragma warning(disable:4996)
  7 
  8 /*
  9     API 函数区
 10 */
 11 //int clientAPI(char * main, char * buf)
 12 int getStr1Str2(char* get_string, char* odd_string, char* even_string)
 13 {
 14     /*
 15         形参判断区,定义返回变量
 16     */
 17     int getReturnValue = 0;
 18 
 19     if (get_string == NULL || odd_string == NULL || even_string == NULL)
 20     {
 21         getReturnValue = -1;
 22 
 23         printf("trimSpace error: %d in (string_input_trim == NULL || \
 24             string_output_trim == NULL)\n", getReturnValue);
 25 
 26         return    getReturnValue;
 27     }
 28 
 29     /*
 30         辅助指针区
 31         在被调用函数中,定义辅助指针 * 变量,
 32         把形参接过来,不要轻易改变被调用函数中的形参值
 33     */
 34     char* gs = get_string;
 35     char* os = odd_string;
 36     char* es = even_string;
 37 
 38 
 39     /*
 40         算法区
 41     */
 42     int i;
 43     int e_j = 0;
 44     int o_j = 0;
 45 
 46     //for (i = 0; i < strlen(gs); i = i + 2)
 47     //{
 48     //    *(es + e_j) = *(gs + i);
 49     //    e_j++;
 50     //}
 51     for (i = 0; i < strlen(gs); i++)
 52     {
 53         if (i % 2 == 0)
 54         {
 55             *(es + e_j) = *(gs + i);
 56             e_j++;
 57         }
 58         else
 59         {
 60             *(os + o_j) = *(gs + i);
 61             o_j++;
 62         }
 63     }
 64 
 65     *(es + e_j) = '\0';
 66     *(os + o_j) = '\0';
 67 
 68     /*
 69         返回区
 70     */
 71 
 72     return getReturnValue;
 73 }
 74 
 75 
 76 /*
 77     主函数区
 78 */
 79 int main2019072301()
 80 {
 81     /*
 82         参数区
 83     */
 84     int returnMain = 0;
 85 
 86     char* string_main = "1a2b3d4z";
 87     //int string_length = sizeof(string_main);
 88 
 89     //char* string_odd[(const int)string_length];
 90     //char* string_even[(const int)string_length];
 91     char* string_odd = malloc(10);
 92     char* string_even = malloc(10);
 93 
 94     /*
 95         函数调用区
 96     */
 97     returnMain = getStr1Str2(string_main, string_odd, string_even);
 98 
 99     /*
100         返回区
101     */
102     if (returnMain != 0)
103     {
104         printf("clientAPI error: %d\n", returnMain);
105     }
106     else
107     {
108         printf("even string: %s\n", string_even);
109         printf("odd string: %s\n", string_odd);
110     }
111 
112     system("pause");
113     return returnMain;
114 }
View Code

3. 键值对 (“key = value”) 字符串,在开发中经常使用;
a) 要求1:请自己定义一个接口,实现根据key获取valude。
b) 要求2:编写测试用例
c) 要求3:键值对中间可能有n多空格,请去除空格。
d) 注意:键值对字符串格式可能如下
i. “key1 = valude1”
ii. “key2 =      valude2”
iii. “key3    = valude3”
iv. “key4         valude4”
v. “key5    =    “
vi. “key6    =  ”
vii. “key7    =     “
e) 函数:int getKeyByValude(char* keyvaluebuf, char* keybuf, char* valuebuf, int* valuebuflen);
f) 例子:“ORACLE_name = itcast” “ORACLE_name” itcast “oracle_pwd=123456” “oracle_pwd” 123456 “oracle_pwd=  123456” “oracle_pwd” 123456
g) 函数例子  int main(){ getKeyByValude(“key1=  valude1  “, “key1”, buf, &len)}

  1 //API函数
  2 #include <stdlib.h>
  3 #include <string.h>
  4 #include <stdio.h>
  5 
  6 #pragma warning(disable:4996)
  7 
  8 /*
  9     API 函数区,专注算法
 10 */
 11 //int clientAPI(char * main, char * buf)
 12 int getKeyValue(char* getString, char* getKey,char* getValue, int* valueLength)
 13 {
 14     /*
 15         形参判断区,定义返回变量
 16     */
 17     int returnGetKeyValue = 0;
 18     if (getString == NULL || getKey == NULL || \
 19         getValue == NULL || valueLength == NULL)
 20     {
 21         printf("error in (getString == NULL || getKey == NULL || \
 22         getValue == NULL || valueLength == NULL) = %d", returnGetKeyValue);
 23         returnGetKeyValue = -1;
 24     }
 25 
 26     /*
 27         辅助指针区
 28         在被调用函数中,定义辅助指针 * 变量,
 29         把形参接过来,不要轻易改变被调用函数中的形参值
 30     */
 31     char* gs = getString;
 32     char* gk = getKey;
 33     char* gv = getValue;
 34     int* vl = valueLength; //strlen(gs)
 35 
 36     /*
 37         算法区
 38     */
 39     int i = 0;
 40     int j = 0;
 41     while (*gs != '\0')
 42     {
 43         printf("*gs = %c\n", *gs);
 44         if (*gs == '=')
 45         {
 46             gs = gs + 1;
 47             break;
 48         }
 49         else if (*gs == ' ')
 50         {
 51             gs = gs + 1;
 52             continue;
 53         }
 54         else
 55         {
 56             *(gk + i) = *gs;
 57             //gk++;
 58             i++;
 59             gs++;
 60         }
 61     }
 62 
 63     while (*gs != '\0')
 64     {
 65         printf("*gs = %c\n", *gs); 
 66         if (*gs == ' ')
 67         {
 68             gs = gs + 1;
 69             continue;
 70         }
 71         else
 72         {
 73             *(gv + j) = *gs;
 74             //gv++;
 75             j++;
 76             gs++;
 77         }
 78     }
 79 
 80     *(gk + i) = '\0';
 81     *(gv + j) = '\0';
 82 
 83     /*
 84         返回区
 85     */
 86     printf("key = %s\n", gk);
 87     printf("value = %s\n", gv);
 88 
 89     /*
 90     key = key5
 91     value = value12345
 92     */
 93 
 94     return returnGetKeyValue;
 95 }
 96 
 97 /*
 98     API 函数区,专注输出,多参函数的调用,TBC
 99 */
100 
101 int globalPrint(int sInfo, ...)
102 {
103     int returnGlobalPrintValue = 0;
104 
105     return returnGlobalPrintValue;
106 }
107 
108 
109 /*
110     主函数区
111 */
112 int main()
113 {
114     /*
115         参数区
116     */
117     int returnMain = 0;
118 
119     char* string_main = "key5   =      value12345   ";
120     char* string_key = malloc(100);
121     char* string_value = malloc(100);
122     int value_length = 0;
123     value_length = strlen(string_main);
124 
125     /*
126         函数调用区
127     */
128     returnMain = getKeyValue(string_main, string_key, string_value, &value_length);
129 
130 
131     /*
132         返回区
133     */
134     if(returnMain != 0)
135     {
136         printf("clientAPI error: %d\n", returnMain);
137     }
138     else
139     {
140 
141     }
142 
143     system("pause");
144     return returnMain;
145 }
146 
147 
148 int mainxxxx()
149 {
150     char* gs = "key5   =      value12345   ";
151     char* gt = "key";
152     printf("strlen = %d\n", strlen(gs));
153     printf("sizeof = %d\n", sizeof(gs));
154 
155     printf("%s\n", *(gt + strlen(gt)));
156     printf("%c\n", *(gt + strlen(gt)));
157     /*
158     
159     */
160 
161     for (int i = 0; i < strlen(gt); i++)
162     {
163         printf("%c\n", *(gt + i));
164     }
165     /*
166         trlen = 27
167         sizeof = 4
168         (null)
169         k
170         e
171         y
172     */
173     for (int i = 0; i < strlen(gt) + 1; i++)
174     {
175         printf("%c\n", *(gt + i));
176     }
177     /*
178         k
179         e
180         y
181         
182     */
183 
184 
185     /*for (int i = 0; i < strlen(gt) + 1; i++)
186     {
187         printf("%s\n", *(gt + i));
188     }*/
189     /*
190     引发了异常: 读取访问权限冲突。
191         **it** 是 0x6B。
192         
193     */
194 
195     /*printf("%s\n", *(gt + 1));*/
196 
197     //char* ptr = "abc";
198     //printf(ptr);
199     //printf("\n%c\n",*(ptr + 1));
200     //printf("\n%s\n",*(ptr + 1));    //引发了异常: 读取访问权限冲突。**it** 是 0x62。
201     char* gg = (char*)malloc(5);
202     //while (*gt != NULL)
203     //{
204     //    *gg = *gt;
205     //    gg++;
206     //    gt++;
207     //}
208 
209     for (int i = 0; i < strlen(gt) + 1; i++)
210     {
211         *(gg + i) = *(gt + i);
212     }
213     //*gg++ = '\0';
214     printf("%s\n", gg);
215 
216     system("pause");
217     return 0;
218 }
219 
220 int mainxxxc()
221 {
222     char* string = "key = 3";
223     for (int i = 0; i < strlen(string); i++)
224     {
225         printf("%c\n", *(string + i));
226     }
227     /*
228     k
229     e
230     y
231     
232     =
233     
234     3
235     */
236 
237     for (int i = 0; i < strlen(string) + 1; i++)
238     {
239         printf("%c\n", *(string + i));
240     }
241     /*
242     k
243     e
244     y
245     
246     =
247     
248     3
249     
250     */
251     char* k = (char*)malloc(10);
252     char* v = (char*)malloc(10);
253     for (int i = 0; i < strlen(string) + 1; i++)
254     {
255         if (*(string + i) == '=')
256         {
257             printf("found '='\n");
258         }
259         else
260         {
261             printf("not found '='\n");
262         }
263     }
264 
265     /*
266     not found '='
267     not found '='
268     not found '='
269     not found '='
270     found '='
271     not found '='
272     not found '='
273     not found '=' --> '\0'
274     */
275 
276     //char* string = "key = 3";
277     int j = 0;
278     int i = 0;
279     //for (i = 0; i < strlen(string); i++)
280     //{
281     //    *(k + i) = *(string + i);
282     //    if (*(string + i) == '=')
283     //    {
284     //        //for (; i < strlen(string); i++)
285     //        //{
286     //        //    *(v + j) = *(string + i + 1);
287     //        //}
288     //        for (j = 0; j < strlen(string); j++)
289     //        {
290     //            *(v + j) = *(string + i + 1);
291     //            i++;
292     //        }
293     //    }
294 
295     //}
296 
297     //for key
298     for (i = 0; i < strlen(string); i++)
299     {
300         *(k + i) = *(string + i);
301         printf("%c\n", *(k + i));
302         //key is key
303         /*
304         k
305         e
306         y
307         
308         =
309         */
310         
311         if (*(string + i) == '=')
312         {
313             printf("x  %c\n", *(string + i));
314             printf("y  %c\n", *(string + i +1));
315             string = string + i + 1;
316             printf("%c\n", *string);
317             /*
318             x  =
319             y
320             
321             */
322             break;
323         }
324     }
325 
326     for (j = 0; j < strlen(string); j++)
327     {
328         printf("z    %c\n", *string);
329         *(v + j) = *(string + j);
330     }
331     
332 
333     /*
334     key is ke
335     value is
336     */
337 
338     *(k + i) = '\0';
339     *(v + j) = '\0';
340 
341     printf("key is %s\n", k);
342     printf("value is %s\n", v);
343 
344     system("pause");
345 
346     return 0;
347 }
View Code

猜你喜欢

转载自www.cnblogs.com/codebeef0911/p/11233928.html