C语言基础学习:字符串操作

数组

//数组
int arrInt[] = {6,4,8,5,4,3,1,5,9,4,7,2};
int restlt = arrInt[*arrInt+*(arrInt+4)];
printf("result的值是多少:%d\n",result);// 6 + 4 = 10

int restlt = arrInt[*(arrInt+*(arrInt+4))];
printf("result的值是多少:%d\n",result);// *(6 + 4 = 10) = 4

字符串

//printf 遇到\0才会自动停掉
char str[] = {'D','e','r','r','y',‘\0};
str[2] = 'z';
printf("第一种方式:%s\n",str);


char * str2 = "Derry";// 隐式假如\0,abcdef\0
str2[2] = 'z';//会崩溃,第一种方式是复制了一份在栈区,而第二种是只有引用而已,不能修改。
printf("第二种方式:%s\n",str);

在这里插入图片描述

指针挪动获取字符串信息

int getLen(char * string){
	while(*string){ //*string != '\0',就不会结束,不是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的长度是:%d\n,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’,'\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,'\0'};
	int result;
	getLen2(&result,intarr2);
	printf("长度是:%d/n",r);//长度是7
	return 0;
}

字符串转换和比较

//字符串转换
char * num = "1";
int restlt = atoi(num);
if(result){
	//非 0 即 true
	printlf("转换后的值是:%d\n",result);
} else {
	printlf("转换失败!\n");
}

double = resultD = atof(num);
printlf("double 转换后的值是:%d\n",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的值是:%s\n",pop) // 输出abce
} else {
	printf("没有查找到,subtext的值是:%s\n",subtext )
}

//包含
if(pop){ 
	printf("包含\n"); //输出包含
} else {
	printf("没有包含\n");
}
//a 在text中那个位置上
int index = pop - text;
// index = "abce"的指针 - "name is abce"的指针;
//可以用数组来理解,text的指针默认指向第一位,而abce的指针指向的是text的第九位
printf("%s第一次出现的位置:%d\n",subtext,index);//9

//拼接
char destination[25];//静态范畴,大小不能变了
char * blank = "--到--"*cpp="c++",*java="java";
strcpy(destination,cpp);//先copy到数组里面去
strcpy(destination,blank);//再拼接
strcpy(destination,java);//再拼接
printf("拼接后的结果:%s\n",destination);
//代码效率明显有点低

大小写转换

void lower(char * dest, char * name){
	char * temp = name;//定义临时指针,避免破坏指针name
	while(*temp){
		*dest = tolower(*temp);//使用官方的单个字符转换api:tolower
		temp ++;
		dest++}
	*dest = ‘\0;//避免printf打印系统值
}



int main(){
	char * name = "Abcef";
	//先定义结果
	char dest[20];
	lower(dest,name);
	printf("小写转换后的结果是:%s\n",dest);// 输出abcef

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值