这两天练习中,做好多个字符串相关的练习,字符串在C程序中应用也是非常多,自己针对这两天不断地与她打交道,对于字符串的操作做一些总结。
1、 字符串、字符数组:
char str1[5] = {'H', 'e', 'l', 'l', 'o'};
char str2[] = "Hello";
上面的第一个 str1 只能是字符数组,如果在程序中把它当做字符串处理的话就会出错。
第二个 str2 就是一个字符串。
上面的字符数组的大小 sizeof(str1) = 5, 而字符串的大小 sizof(str2) = 6, 因为字符串的最后有一个结束字符 '/0', 也就是说 str2 中的字符 有 'H', 'e', 'l', 'l', 'o' ,'/0' 六个字符。
如果在字符数组的初始化或赋值中 让最后一个字符等于 '/0', 这样字符数组也就可以把它当做字符串来处理。
char str1[6] = {'H', 'e', 'l', 'l', 'o', '/0'}; 这样 str1 就可以做一个字符串了。
2、 字符串做参数传递给函数:
字符串做参数传递给函数时,大多都是指针传递,是把字符串的首地址传递给函数(如果只想函数使用字符串,而不需要函数修改字符串传地址进来的时候用 关键字const修饰地址,例:const char *;其他传递地址的参数也一样)。
在函数中对于传递进来的字符串处理,应该注意以下几个方面:
1)、判断传入进来的地址是否为空。。。。。。这是一个习惯,函数应该对传入进来的所有指针都做一下是否为空的判断,再进行针对性的操作,这样可以增加程序的健壮性。
2)、注意对传入进来的字符串指针进行保护,这个指针式指向字符串的第一个字符的地址,在函数里不断地对字符串里的字符进行操作,就要不断地变换地址,如果只有一份地址拷贝的话,而又由于刚才的操作已经改变了指针变量的值,要想再对这个字符串进行完整的操作就不可能了。如果你只操作一次,可以不用拷贝。
3)、对字符串添加或删除了字符,一定注意要给字符串加上结束字符 '/0' 。
4)、注意当前指针指向了字符串里的位置,哪个字符!
while(*str != '/0')
{
str++;
}
执行完while之后,指针str 指向的是结束字符 '/0' 。
while(*(str++) != '/0')
;
执行完while之后,指针str 指向的是结束字符 '/0' 的下一个地址。
3、 对于字符串的一些常见操作:
1)将整个字符串逆置:
int inverse(char *str)
{
char *str_temp;
if(str == NULL) return -1; //
str_temp = str; //
while(*str_temp != '/0')
{
str_temp++;
}
str_temp--; //str_temp 指向的是最后一个字符
/*===逆置===*/
while(str < str_temp)
{
/*====交换====*/
*str = (*str) + (*str_temp);
*str_temp = (*str) - (*str_temp);
*str = (*str) - (*str_temp);
/*===========*/
str++;
str_temp++;
}
/*=========*/
}
2)、删除字符串中指定的字符
int delete_char(char *str, char letter)
{
char *p;
if(str == NULL) return -1;
while(*str != '/0')
{
if(*str == letter)
{
p = str;
while(*p != '/0')
{
*p = *(p + 1);
p++;
}
str--; //这里一定要注意,你想想就会明白的
}
str++;
}
}
。。。。。。。。。。。
以上只是我在练习中的一些小总结,若有什么地方总结的不对或不足的话,欢迎指出!