[C/C++基础--笔试突击] 2.字符串

时间:2023-01-04 17:11:50

概述:

  字符串是由零个或多个字符组成的有限序列。

  子串:串中任意个连续的字符组成的子序列。

  字符串是最常见和常考的一种类型,有很多演化的问题,例如最长公共子序列等,这里就不介绍了,只了解一下相关的基本知识和标准库的一些函数。

 

2.1 C风格字符串

包含两种:

1)字符串常量:以双引号括起来的字符序列是字符串常量。为了兼容C语言,C++所有的字符串常量都由编译器自动在末尾添加一个空字符

:字符常量'A'表示单个字符A,然后"A"是字符串常量,其表示字母A和空字符(null)两个字符。

2)末尾添加了'\0'的字符数组。

C++语言通常用char*/const char*类型的指针来操纵C语言中的字符串,一般来说,我们使用指针的算术操作来遍历C风格字符串,直到到达结束符null为止。

const char *cp = "hello world";
while(*cp) {
//...
cp++;
}

注:最后的'\0'会转化为十进制的0,因此可以用while(*cp)来判断。

举个小例子,可以以此来求得字符串的长度:

int len(char *x) {
char *y = x;
while(*y++); // 一直走到null
return (y - x - 1); // 同类型指针相减 返回值为距离
}

 

2.2 标准库中提供的字符串处理函数

C/C++提供了众多的字符串处理函数,下表介绍了主要的一些函数:

 

 strlen(s)

 返回s的长度,不包括字符串结束符null

 strcmp(s1,  s2)

 比较两个字符串s1和s2是否相同。若相等,返回0;若s1大于s2,返回正数;否则返回负数。

 strcat(s1, s2)

 将字符串s2连接到s1后,返回s1

 strcpy(s1, s2)

 将s2复制给s1,并返回s1 

 strncat(s1,s2,n)

 将s2的前n个字符连接到s1后面,并返回s1

 strncpy(s1,s2,n)

 将s2的前n个字符复制给s1,并返回s1

 

再弄清楚两个容易混淆的函数:

1)memcpy

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

功能:从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。函数返回指向dest的指针。

2)memset

void *memset(void *s, int ch, size_t n);

功能:将s中前n个字节用ch替换并返回s,作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作最快的一种方法。

 

下面写一个知识点:

strcpy和memcpy的区别

1.复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。

2.复制的方法不同。strcpy不需要指定长度,遇到被复制字符串的结束符'\0'才结束,所以容易溢出。memcpy则根据第三个参数来决定复制的长度。

3.用途不同。通常在复制字符串的时候用strcpy,其他类型的时候用memcpy。

 

字符串的基本知识就复习到这里了,字符串的实际应用时最广泛的,这就要好好的研究算法了,希望大家能记住这部分的知识~。~

 

返回目录 -> C/C++基础知识概述