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 }
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 }
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 }