字符串的定义是什么?
字符串是以'\0'结尾的字符数组。字符数组的最后一个单元的值是'\0',就可以判断它是字符串。
char str[]={'c','h','i','n','a','\0'}最后一个字符时\0。等价于char *str="china";也等价于 char str[]="china";
也等价于char str[]={"china"};,它们显式或隐式的在最后一个单元添加了'\0',而且它们的字符元素个数都是6。字符数组的元素格式=字符串大小+1;
字符串操作常用函数
gets、scanf、puts、strlen、strcpy、strncpy、strcat这些函数必须牢牢掌握
gets和scanf比较
1、gets输入的字符可以包含空格,scanf不可以包含空格
2、gets只能输入一个字符串,scanf可以通过格式控制符输入多个字符串
3、gets不能限定字符串的长度,直到回车键为止,scanf可以通过“%ns”限定长度
4、gets遇到回车结束,scanf遇到空格或回车结束
strcpy、strncpy、memcpy的介绍和比价
strcpy和strncpy的共同点就是他们接受的第一个参数必须是字符数组变量,第二个参数可以是字符串常量。因为第一个参数是目标项,只有变量才可以被修改。
str1是字符数组变量,str2是字符串常量。
没有字符串变量这一说
void strtest(){
char str1[]="china";
str1[1]='1';
char *str2="china";
str2[1]='2'; //运行时报错
printf("%s,%s",str1,str2);
}
memcpy可以实现任何类型的数组拷贝。
stricmp和strcmp
前者比较式不区分大小写,后者区分。
其它常用的字符串处理函数
strset 将一个串中的所有字符都设为指定字符
strlwr 将一个串中的所有字符转换成小写
strupr 将一个串中的所有字符转换成大写字符
atoi将字符串转化成整形
如果字符串中有非法字符,就会返回0
atol将字符串转换成长整形
atof将字符串转换成浮点型
如果字符串中有非法字符,就会返回0.000000
ultoa将无符号长整数转化成指定的进制数并以字符串的形式存放到字符数组中
strstr 查找主串中第一次出现子串的位置并从这个位置返回子串,如果没有则返回null。
如果小朋友们想返回主串中子串的起始位置,可以地址相减。
void strstrtest(){
char haystack[20] = "RUNOOB";
char needle[10] = "NOOB";
char *ret;
ret=strstr(haystack, needle);
printf("子字符串是: %s\n", ret);
printf("主串中子串的起始位置:%d\n",ret-haystack);
}