C语言__字符串__

1.什么是字符串:

字符串是由字符构建而成的串行结构,'\0'是它的结束标志。

2.字符串存在的方式及如何创建:

1.字符串字面值

被双引号包括起来的若干个字符,有一个隐藏的’\0’,这种字符串以地址的形式存在在代码中,并且该字符串储存在只读区,一旦定义,不能修改。

创建方法:
char a[] = "Hello";

2.字符数组

char类型的数组,里面存储的是ASCII值,要注意为’\0’留位置,与字符串字面值相比,字符数组可以根据需要进行修改。

创建方法:
char b[] = {'H','e','l','l','o'};

注意,这两种创建方法得到的字符串长度不一样,第一种方法创建的字符串长度为6,第二种方法创建的字符串长度为5,因为第一种方法最后还有一个’\0’,而第二个方法的’\0’的位置被’o’占用了,所以长度只有5,这样会有一个危险,就是如果后面还有一个字符数组c[]创建,而我只想显示b[]数组里的东西,但因为没有’\0’结尾,会把后面c[]里面的字符也打印出来。

如:
#include <stdio.h>

int main(){
	char a[] = "Hello";
	char b[] = {'H','e','l','l','o'};
	char c[] = {'W','o','r','l','d'};
	printf("%s",a);
	printf("%s",b);
	return 0;
}

输出的结果是:
Hello;
HelloWorld;

3.字符串的输入

1.int getchar(void)(字符的输入)

功能:从键盘接收一个字符。
例子:

#include <stdio.h>
#include <getch.h>

int main(){
	char c;
	c = getchar();    //接收一个字符
	printf("%c",c);
	return 0;
}

2.scanf("%s",有效的数组名或者指针变量名)

功能:接收用户输入的数据,缺点是不能接收空格字符,如果有有空格,则剩余字符会影响下次的输入。
例子:

#include <stdio.h>

int main(){
	char str1[20];
	scanf("%s",str1);
	printf("%s",str1);
	return 0;
}

3.char *gets(char *s);

功能:可以接收到空格,但它会无限的接收字符直到遇到回车符,但可能会造成段错误或栈崩溃
例子:

#include <stdio.h>

int main(){
	char str2[20];
	gets(str2);
	printf("%s",str2);
	return 0;
}

4.char *fgets(char *s,int size,stdin);

功能:键盘读取到一个指定长度的字符串
s:存储字符串的首地址
size:字符串的长度(包含’0’),最多接收size - 1个字符,它会为’\0’预留一个位置
注意:如果字符中有’\n’字符,需要把’\n’去掉
例子:

#include <stdio.h>

int main(){
	char str3[20];
	FILE *frp = fopen("test","r");   //我test存放的是helloworld
	fgets(str3,6,frp);
	printf("%s",str3);
	return 0;
}
输出:hello

4.字符串的操作

1.size_t strlen(const char *s)

功能:求字符串的长度,不包括’\0’
例子:

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

int main(){
	char str4[] = "Hello World";
	printf("%d",strlen(str4));
	return 0;
}
输出:11

2.char *strcat(char *dest, const char *src);

功能:在字符串dest后面追加字符串src,即把字符串src接在字符串dest后面
例子:

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

int main(){
	char str5[] = "Hello";
	char str6[] = "World";
	strcat(str5,str6);
	printf("%s",str5);
	return 0;
}
输出:HelloWorld

3.char *strncat(char *dest, const char *src, size_t n);

功能:将字符串src的前n个字符接到字符串dest后面
例子:

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

int man(){
	char str7[20] = "Hello";
	char str8[10] = "World";
	strnact(str7,str8,4);
	printf("%s",str7);
	return 0;
}
输出:HelloWorl

4.char *strcpy(char *dest, const char *src);

功能:将src字符串的内存拷贝到dest中,即dest = src
例子:

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

int main(){
	char str9[20] = "Hello World";
	char str10[20];
	strcpy(str10,str9);
	printf("%s",str10);
	return 0;
}
输出:Hello World

5char *strncpy(char *dest, const char *src, size_t n);

功能:将src字符串的前n个字符拷贝到dest中
例子:

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

int main(){
	char str11[] = "HelloWorld";
	char str12[20];
	strncpy(str12,str11,5);
	str12[5] = '\0';           //记得拷贝完之后在后面加个'\0'来结束,不然如果后面还有空位,会造成乱码
	printf("%s",str12);
	return 0;
}
输出:Hello

6.int strcmp(const char *s1, const char *s2);

功能:按照字典序,比较两个字符串。
s1 > s2 正
s1 = s2 0
s1 < s2 负
从第一个开始比较,一个一个往后比,直到比出大小。
例子:

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

int main(){
	char str13[] = "abc";
	char str14[] = "abd";
	printf("%d",strcmp(str13,str14));
	return 0;
}
输出:-1

7.int strncmp(const char *s1, const char *s2, size_t n);

功能:将s2前n个字符拿来跟s1比较

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

int main(){
	char str15[] = "abc";
	char str16[] = "abcd";
	printf("%d",strncmp(str15,str16,3));
	return 0;
}
输出:0

8.void *memcpy(void *dest, const void *src, size_t n);

功能:内存拷贝,从src地址拷贝n个字节到dest。

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

int main(){
	char str17[] = "HelloWorld";
	char str18[20];
	char *p = str17;
	memcpy(str18,p+5,5);   //   从str17的第六个字符开始,拷贝5个字符
	str18[5] = '\0';        //   要记得给字符数组结束标志,不然会乱码
	printf("%s",str18);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41258050/article/details/84898553