做过程序猿的同学相信大家都对字符串不陌生,这玩意也是工作中使用非常频繁的,那么我们今天就来了解一下C语言中的字符串。我们先从系统提供给我们的字符串操作的函数使用开始:
引入头文件:
#include <string.h>
#include <ctype.h>
开胃菜:(移动指针来变更字符串)
//将字符串中大写字符转化成小写
void toCharLower(char*lowerStr,char* org){
char* temp =org;//此处的做法是不会破坏数据源
while (*temp){
*lowerStr=tolower(*temp);
temp ++;//挪动指针的位置
lowerStr ++;
}
*lowerStr='\0';//避免在打印的时候确认结束符导致打印乱码的问题
}
int main(){
char* name = "LEON";
char results[30];
toCharLower(results,name);
printf("全部小写后的结果:%s\n",results);
return 0;
}
输出结果:
全部小写后的结果:leon
1、字符串的拼接(strcat,strcopy 函数)
char des[25];
char* first ="hi";
char second[]={',','y','o','u','\0'};
char* third="-";
strcpy(des,first);//拷贝first 字符串到des字符串数组中
strcat(des,second);//在des字符串数组中拼接second数组
strcat(des,third);//在des字符串数组中继续拼接third字符指针
printf("拼接的结果:%s\n",des);
输出的结果:
拼接的结果:hi,you-
2、字符串查询 (strstr函数)
说明:
1)strstr函数是查找字符串中是否存在某个子字符串,第一个参数是源字符串,第二个函数是要查找的字符串
2)strstr函数返回的是:要查找的字符串第一次出现的位置开始的字符串
3) 想要取出字符串在源字符串中的位置,那么直接用找到的字符串指针减去源字符串指针即可,这是为什么呢?
字符串在内存中是连续的内存地址,返回的是指向子字符串位置的指针,所以直接相减即可。
char * text ="helloworld";
char * subText="o";
char* pop=strstr(text,subText);
if (pop){
//不为NULL ,表示找到了子字符串
printf("找到子字符串了:%s\n",pop);
}else{
//没有找到
printf("没有找到\n");
}
//取出字符串的位置
int index = pop-text;
printf("位置:%d\n",index);
输出结果:
找到子字符串了:oworld ,
位置:4
3、字符串的比较 (strcmp:区分大小写,strcmpi 不区分大小写)
说明:
1)该函数比较的是每一个字符的ASSIC吗
2)该函数返回的是一个int类型的数据,
**0 : 代表相同;** **非0 : 代表不相同( > 0 :表示前者大于后者 ; < 0 : 表示后者大约前者);**
char *cmpStr1="hElloworld";
char * cmpStr2="helloworld";
int result =strcmp(cmpStr1,cmpStr2);
printf("字符串比较的结果:%d\n",result);
输出的结果:
字符串比较的结果:-1
4、字符串的转换 (atoi, atol 等在stdlib.h 下面)
说明:
1) 这些函数返回值是int类型, : 0 ---> 代表转换失败; 非0 ---> 代表转换成功;
char* num="2";
printf("字符串转化为整数的结果是:%d\n",atoi(num));
输出结果:
字符串转化为整数的结果是:2
5、字符串的表现(字符数组 与 字符指针)
说明:
1)字符数组 需要在数组尾部手动添加'\0'作为字符串的结束,否则尾部是系统提供的值,会出现乱码,而字符指针则系统会默认添加结束符,不再需要手动添加
2)字符数组可以通过下标直接修改数组元素的值,而字符指针如果使用下标的方式则会出现不允许访问的crash
3) 字符数组作为参数传递时,为了搞笑,会把数组优化成指针
4)C语言中比较少的使用返回值来返回函数的结果,而是通过将接受返回值的变量的地址传递进去,直接修改该变量内存地址中的值,这样效率会更高
//自定义一个获取字符串长度的函数
int getLength(char* string){
int count =0;
while (*string){//当没有找到字符串的\0结束符时,会一直循环
string++;
count++;
}
return count;
}
int main(){
/**
* 下面的代码可以看出在字符串数组中的结束符在统计长度时,不能统计进去
*/
char moveStr[]={'h','e','l','l','o','\0'};
printf("moveStr字符串的长度是: %d\n",getLength(moveStr));
int length = sizeof moveStr /sizeof (char );
printf("moveStr字符串的长度是: %d\n",length);
//字符数组
char str[]={'h','e','l','l','o','\0'};//TODO 此处不加入结束符,会在下面打印的时候出现莫名其妙的字符串
str[0]='H';
printf("字符数组的打印:%s\n",str);
//字符指针
char * strP="hello";
// strP[0]='H';//TODO 此处会出现crash
printf("字符指针的打印:%s\n",strP);
return 0 ;
}
输出结果:
moveStr字符串的长度是: 5
moveStr字符串的长度是: 6
字符数组的打印:Hello
字符指针的打印:hello
好了,今天C语言中字符串操作我们就入门到这里了。
网友评论