位域表示法,查找并删除子字符串
1. 关于位域表示法:加类型表示在这个类型上分配。如:
struct packet_bit { unsigned char a:2; unsigned char b:3; }bit; //这样bit只在一个字节unsigned char(这种类型占一个字节)内分配内存,而a占了2位,b占3位,故有3位空闲,此时sizeof(bit) = 1 struct pakcet_bit { unsigned int a:2; unsigned int b:3; }bit; //这样在四字节unsigned int(这种类型占4个字节)内分配内存,故有27位空闲,sizeof(bit) = 4
2.查找并删除在str字符串只能个出现的所有sub_str字串:
strncmp函数在第三个参数设为0时,会直接返回0.认为任意两个字符串相同。所以注意要先对sub_length进行判断,若为0,直接复制结束。否则会在第16步陷入无限循环!
传入实参时,""和"\0"都表示空字符串
1 int delete_sub_str(const char *str, const char *sub_str, char *result_str) 2 { 3 int sub_length = strlen(sub_str); 4 int length = strlen(str); 5 if(sub_length ==0) 6 { 7 strncpy(result_str, str, length); 8 return 0; 9 } 10 int count = 0; 11 int i, j; 12 for(i = 0, j = 0; i < length; i++) 13 { 14 if(strncmp(str+i, sub_str, sub_length) == 0) 15 { 16 i += (sub_length-1); 17 count++; 18 }else 19 result_str[j++] = str[i]; 20 } 21 result_str[j] = '\0'; 22 return count; 23 }