字符串操作
- 数组
- 字符串
- 指针挪动获取字符串信息
- 字符串转换和比较
- 字符串查找、包含、拼接
- 大小写转换
数组
//数组
int arrInt[] = {6,4,8,5,4,3,1,5,9,4,7,2};
int restlt = arrInt[*arrInt+*(arrInt+4)];
printf("result的值是多少:%dn",result);// 6 + 4 = 10
int restlt = arrInt[*(arrInt+*(arrInt+4))];
printf("result的值是多少:%dn",result);// *(6 + 4 = 10) = 4
字符串
//printf 遇到 才会自动停掉
char str[] = {'D','e','r','r','y',‘ ’};
str[2] = 'z';
printf("第一种方式:%sn",str);
char * str2 = "Derry";// 隐式假如 ,abcdef
str2[2] = 'z';//会崩溃,第一种方式是复制了一份在栈区,而第二种是只有引用而已,不能修改。
printf("第二种方式:%sn",str);
指针挪动获取字符串信息
int getLen(char * string){
while(*string){ //*string != ' ',就不会结束,不是0,C专门支持
}
return 0;
}
int getLen1(int intarr[]){
//size(intarr)28 / sizeof(int) 4 = 7
ine len = sizeof(intarr)/sizeof(int);
//输出1 C/C++编译器,数组作为参数传递,会把数组优化成指针(为了高效率)
printf("getLne1" len的长度是:%dn,len);
return 0;
}
//在C中一般都不靠返回值,这点跟java有所区别
void getLne2(int * resultLen, int intarr[]){
int count = 0;
while(*intarr){
intarr++;
count++;
}
*resultLen = count;
}
int main(){
char string[] = {'a','b','c','d',‘0’,' '};
int r = getLen(string);
printf("长度是:%d/n",r);//长度是4
int len = sizeof(char)/ sizeof(char); //6
int intarr[] = {1,2,3,4,5,6,7};
getLen1(intarr);
int intarr2[] = {1,2,3,4,5,6,7,' '};
int result;
getLen2(&result,intarr2);
printf("长度是:%d/n",r);//长度是7
return 0;
}
字符串转换和比较
//字符串转换
char * num = "1";
int restlt = atoi(num);
if(result){
//非 0 即 true
printlf("转换后的值是:%dn",result);
} else {
printlf("转换失败!n");
}
double = resultD = atof(num);
printlf("double 转换后的值是:%dn",resultD);
//字符串比较
char * str1 = "abcdef is";
char * str2 = "abcdef"
int resultc = strcmp(str1,str2);//区分大小写
int resultc = strcmpi(str1,str2);//不区分大小写
if(!resultc){// 0 相等 ,非0不相等
printlf("相等")
} else {
printlf("不相等")
}
字符串查找、包含、拼接
char * text = "name is abce";
char subtext = "a";
//strstr API返回的是一个指针
char * pop = strstr(text,subtext);
//查找
if(pop){ //非NULL ,就进入了if,就查找到了
printf("查找到了,pop的值是:%sn",pop) // 输出abce
} else {
printf("没有查找到,subtext的值是:%sn",subtext )
}
//包含
if(pop){
printf("包含n"); //输出包含
} else {
printf("没有包含n");
}
//a 在text中那个位置上
int index = pop - text;
// index = "abce"的指针 - "name is abce"的指针;
//可以用数组来理解,text的指针默认指向第一位,而abce的指针指向的是text的第九位
printf("%s第一次出现的位置:%dn",subtext,index);//9
//拼接
char destination[25];//静态范畴,大小不能变了
char * blank = "--到--",*cpp="c++",*java="java";
strcpy(destination,cpp);//先copy到数组里面去
strcpy(destination,blank);//再拼接
strcpy(destination,java);//再拼接
printf("拼接后的结果:%sn",destination);
//代码效率明显有点低
大小写转换
void lower(char * dest, char * name){
char * temp = name;//定义临时指针,避免破坏指针name
while(*temp){
*dest = tolower(*temp);//使用官方的单个字符转换api:tolower
temp ++;
dest++;
}
*dest = ‘ ’;//避免printf打印系统值
}
int main(){
char * name = "Abcef";
//先定义结果
char dest[20];
lower(dest,name);
printf("小写转换后的结果是:%sn",dest);// 输出abcef
return 0;
}