字符串

一.字符串
1.以整数0结尾的一串字符;
2.0和‘\0’是一样的,但是和‘0’不同;
3.0标志字符串的结束,但不是字符串的一部分,并且计算字符串长度时候不包含这个0;
4.字符串以指针的形式存在,以数组和指针的形式访问,更多的是以指针的形式;
5.在<string.h>里有很多处理字符串的函数;
例如:
char* str=“hello”;
char word[]=“hello”;
char line[10]=“hello”;
"…"里的是字符串常量;
6.不能用运算符对字符串做运算,但是可以用数组遍历;
7.唯一特殊的地方就是字符串字面量(“”)可以用来初始化字符数组,就是C语言能够识别;

二.字符串常量
1.char* s=“hello.world” --> const char* s;
2.s是一个指针,初始化为指向一个字符串常量;
3.字符串只能读不能写,如果想要修改字符串应该用数组;
chart s[ ]=“hello,world”;

三.指针和数组
指针:char* str = "hello”;
数组:char word[ ]=“hello”;
对于数组: 1.表示字符串在这里;
2.作为本地变量空间自动被收回;
对于指针: 1. 不知道这个字符串在哪里;
2.可以用来处理参数,给它分配一个空间(malloc);
所以:
如果要构造一个字符串 ---->数组;
如果要处理一个字符串 ---->指针;
字符串可以表示为char的形式,但是char不一定是字符串,本意是指向字符的指针,可能指向的是字符串的数组(想int一样)只有char所指的字符串数组有结尾的0时才能说它所指的是字符串。

四.字符串的输入输出
1.

#include<stdio.h>
int main(void){
	char string[8];
	char string2[8];
	scanf("%7s",string);
	scanf("%7s",string2);
	printf("%s##%s##\n",string,string2);
	char buffer[100]="";
	printf("%s",buffer[0]); 
	return 0;
}

在这里插入4444图片描述在这里插入图片描述
scanf是不安全的,因为不知道要读入的内容的长度,可以在%s中间加一个7---->%7s
%as -------> a比数组的大小小一;
2.
char* string;
scanf("%s",string);
这样看起来是正确的,但是错误的认为char*是字符串类型,定义了一个字符串类型的变量string就可以直接使用了,但是没有对本地变量string初始化为0。但是不一定每次运行都出错,注意。

添加
int main(int argc , char const *argv[]) :main中的参数,int表示数组有几个字符串。

putchar
int putchar(int c); 向标准输出写一个字符。 EOF表示写失败。
getchar
int getchar(void); 向标准输入读入一盒字符。
如果返回类型是int是为了返回EOF(-1)。

#include<stdio.h>

int main(int argc,char const *argv[])
{
	int ch;
	while((ch=getchar())!=EOF){
		putchar(ch);
	}
	
	return 0;
 } 

Ctrl z退出程序。
在这里插入图片描述

字符串函数
1.strlen
size_t strlen(const char*);
返回S的字符串长度(不包含结尾的0);

2.strcmp
int strcmp(const chars1,const chars2);
比较两个字符串,返回;
0:s1==s2;
1:s1 > s2;
-1:s1 < s2;
在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
#include<string.h>

int mycmp(const char* s1,const char* s2){
	//int idx=0;
	//while(s1[idx]==s2[idx]&&s1[idx]!='0'){
	//	if(s1[0] != s2[0]){
	//		break;
	//	}else if(s1[idx] == '\0'){
	//		break;			
	//	}
	//	idx ++;
	
	while(*s1 == *s2&& *s1!='\0'){
		s1++;
		s2++;
	}
	return *s1-*s2;
	} //自己给出的strcmp; 
int main(int argc,char const *argv[]){
	char s1[]="abc";
	char s2[]="abc ";
	printf("%d\n",mycmp(s1,s2));
	return 0;
} 

3.strcpy
char* strcpy(char* restrict dst,const char* restrict src)
1.把src的字符串拷贝到dst,返回dst。
2.restrict表面src和dst不重叠。
3.为了能链起代码来。
做什么:复制一个字符串。
char* dst = (char*)malloc(strlen(src)+1);
strcpy(dst,src);
在这里插入图片描述

#include<stdio.h>
#include<string.h>

char* mycoy(char* dst,const char* src)
{
	int idx =0;
	while(src[idx]!=0){
	dst[idx]=src[idx];
	idx ++;
	}
	dst[idx]='\0';
	return dst;
}//等同于strcpy. 

int main(){
	char s1[]="";
	char s2[]="abc";
	strcpy(s1,s2);
	printf("%s\n",strcpy(s1,s2)); 
	return 0;

在这里插入图片描述

4.strcat
char* strcat(char* restrict s1,const char* restrict s2);
把s2拷贝到s1后面接成一个长的字符串,返回s1并且具有足够的空间。
dst [strlen(dst)]=src[0];
strcpy和strcat都可能出现问题,因为目的地不能保证有足够的空间。
安全版本
char* strncpy(char* restrict dst,condt char* restrict src,size_t n);
char* strncat(char* restrict s1,const char* restrict s2,size_t n);
int strncmp(const char* s1,const char* s2,size_t n);

字符串搜索函数
char* strchr(const chars,int c);从左边寻找第一个C,给的是指针;
char
strrchr(const char*s,int c);从右边寻找;

#include<stdio.h>
#include<string.h>

int main(int argc,char const *argv[])
{
	char s[]="hello";
	char *p=strchr(s,'l');
//	p =strchr(p+1,'l') ;
	printf("%s\n",p);
	
	return 0;
 } 

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值