C语言字符串入门级——字符串定义、字符串函数

发布时间:2024-04-29 15:01

入门级知识点,可能不全,之后想起来再更新:

一、字符串

几种字符串的定义方式:

#include 
int main()
{
	char *month[3]={"Jan","Feb","March"};
	printf("%s\n",month[2]);
	//month前面必须有星号,否则报错
	
	char greeting[6]="Hello";
	printf("%s\n",greeting);
	//greeting[n],当n小于6时,运行会报错
	
	char hello[]="Hello";
	printf("%s\n",hello);
	//方括号里不添加数组长度也可以
	
	char *p="Greetings!";
	printf("%s\n",p);
	//指针型字符串,如果输出换成*p会报错 
	
	char c[]={'H','e','l','l','o'};
	printf("%s\n",c);
	
	printf("input:\n");
	char inputc[10];
	gets(inputc);
	printf("%s",inputc);
	
	return 0;	
}

字符串以数组的形式存在数组表示,以‘\0’结尾。(0和‘\0’是一样的)
0标志字符串的结束,但是不属于字符串的一部分

头文件:

字符串变量:所占空间总比字母数多一个
Eg: "Hello"会被编译器会变成一个字符数组放在某处

不能用运算符对字符串做运算:
python可以做加乘,但是C 只能作为数组来处理

字符串变量
char *s=“Hello world”
等价于以下两个语句:
char *s;
s=“Hello world”

*这里的s是一个指针,初始化为指向一个字符串常量,是只读的,不能通过s[0]='L’来更改字符串
实际上,S是const char s

定义一个可以修改的字符串,应该用数组:char s[]=“Hello world”

指针还是数组:
1.数组:表示这个字符串就在这
作为本地变量,空间被自动回收
2.指针:这个字符串不知道在哪里
1)只表达一个字符串,只读
2)处理参数
3)动态分配空间

字符串可以表示成char *的形式,但是char *不一定表示字符串
char *本意是指向字符的指针,可能指向的是字符的数组

字符串的赋值:
char *t=“Hello”
char *p
p=t
此时,p指向t所指的字符串,在存储空间中,并没有产生一个新的字符串

字符串的输入输出:%
无论是scanf还是printf 都可以用%s
Scanf 读入一个string 到空格,tab结束
安全做法:scanf("&7s") 指定最多能读几位

字符串数组:用一个数组,表示很多个字符串

二、字符串函数

1、单字符的输入输出:
putchar 函数:
int putchar (int c)
向标准输出写入一个字符
返回值:返回写了几个字符,EOF(-1)表示失败
Eg:
char a=‘B’ //只能定义一个字符
putchar (a) //相当于printf("%c",a)

getchar 函数:
不需要有参数:int getchar (void)
从标准输入读入一个字符,返回值是这个字符
返回值的类型是int 是为了:返回EOF(-1)
Eg:
char a=getchar()
putchar(a)
1)gets()用于从标准输入流stdin读入一个整行(以’\n’或EOF)结束,写入ptr指向的字符数组,并返回这个指针;出错或遇到文件结束时则返回NULL。行末的’\n’从流中取出,但不写入数组。gets()不检查被写入的数组大小。
gets(str)
puts(str) //str是定义的数组名
2)getchar()用于从标准输入流stdin读入一个字符,并返回这个字符。如果读到文件结尾,则返回EOF。注意到EOF不能用char类型表示,所以getchar()函数返回的是一个int型的数。使用时也应该注意这一点。

2、strlen 函数
srtlen (const char *s) :返回s的字符串长度(不包含结尾的0)
代码:
#include
#include
int main()
{
char line[]=“Hello”;
printf(“strlen=%lu \n”,strlen(line));
printf(“sizeof=%lu \n”,sizeof(line));

return 0;

}
sizeof的结果比strlen多一位,因为最后多一个0,sizeof得出的是指针所指向的所有空间

3.strcmp函数
用于比较两个字符串(以及其大小):
Int strcmp (const char s1,const chars2)
返回值:
0: s1==s2
1: s1>s2
-1: s1 代码:
#include
#include
int main()
{
char s1[]=“abc”;
char s2[]=“Abcd”;
int c=strcmp(s1,s2);

printf("%d",c);
return 0;

}

4.strcpy 函数
char *strcpy (char * restrict dst , const char *restrict src)
作用:把src的字符串拷贝到dst,restrict 表示dst 与src 不重叠(C99)
返回:dst
复制一个字符串:代码

#include 
#include  
#include 
int main()
{
	char *src="Hello"; 
	char *dst=(char*)malloc(strlen(src)+1);
	strcpy(dst,src);
	printf("%s",dst);
	return 0;
}

5.strcat 函数
Char *strcat(char *restrict s1,const char *restrict s2 )
把s2拷贝到s1后面,接成一个长字符串 (s1必须有足够的空间)
返回:s1

安全版本:strncpy,strncmp,strncat 括号最后多一项:size_t n 表示最多操作的字符个数

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号