字符串处理函数操作字符数组

字符串处理函数操作字符数组

常用字符串操作函数如下所示:

Strcmp函数用法

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>  
#include <string>  
using namespace std;  
 
int main()  
{  
 
    char src[]="hello", dest[]="world";  
 
    int strcompare = strcmp(dest, src);  //将“hello”与“world”相比较,当dest > src, return 1; 当dest < src, return -1; 当dest = src, return 0  
    cout << strcompare << endl;  
}

字符串比较规则:

在ASCII码值中,数字的编码是48-57,大写字母的编码是65-90,小写字母的编码是97-122。其实,就是

在ASCII码值中,数字的编码是48-57,大写字母的编码是65-90,小写字母的编码是97-122。其实,就是按照字母,数字等等字符在ASCII码值中的排列顺序的先后。

下图为ASCII简单的一部分编码表:

Strcat函数的用法

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>  
#include <string>  
using namespace std;  
 
int main()  
{  
 
    char src[50]="hello", dest[]="world";  
 
    strcat(sre, dest);  //把“world"连接到“hello”后面,该函数调用格式“strcat(被扩充字符串, 被添加字符串)”  
    cout << dest << endl;  
}

注意:被扩充字符串src数组的空间必需够用,否则会导致内存溢出。

如何判断src数组的空间是否够用?

我们回忆一下:字符串与字符型数组的区别——字符串转为字符型数组后应在结尾添加’\0’作为字符串结尾的标志,而且’\0’占一个bit的空间(因为数组类型时char类型)。因此,src扩充后应该占用5+5+1(当添加字符串时,被扩充字符型数组src中的’\0’被取消,这是为了迎接新字符段的加入)。

附:字符串在字符型数组中的存储方式:

该函数调用格式:

Strcat(char*destination, const char* source)这个表述太复杂,改进一下:Strcat(被扩充字符数组的数组名,添加字符数组的数组名)。函数返回值为“被扩充字符型数组的数组名(地址)”,为啥返回地址呀?对地址进行操更加方便快捷。

Strcpy函数的用法

该函数的定义原型为:char * strcpy( char destination[], const char source[]);
相关的说明在这里:http://www.cplusplus.com/reference/cstring/strcpy/
其作用就是将第2个参数的字符串拷贝到第一个参数的字符数组中,所以要保证第1个参数的字符数组大小够用。注意:第2个参数的结束符 '\0' 也会拷贝过去哦。

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>  
#include <string>  
using namespace std;  
 
int main()  
{  
 
    char src[50]="hellohellohello", dest[]="world";  
 
    strcpy(src, dest);  //把“world"替换“hello”  
    cout << dest << endl;  
}

这里有个疑问:是不是把缓冲区内的src数组中的字符全部刷新取消,再填入”world”?

No,不是的,看如下调试:

程序只是把src字符数组内的前五位替换为world,再在最后一位填入’\0’表示字符串已结束,此时在从缓存区内src位置读取字符,只能读取到首个字符到’\0’的所有字符,即’world’。

Strlen函数的用法

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>  
#include <string>  
using namespace std;  
 
int main()  
{  
 
    char des[50] = "hello";  
    int len = strlen(des);  
    cout << "len = " << len << endl; // 结果为5,计算数组真实长度时不包括'\0'  
}

该函数的定义原型为:int size =strlen (const char str[])

Strchr函数的用法

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>  
#include <string>  
using namespace std;  
 
int main()  
{  
 
    char des[] = "hello";  
    char*place = strchr(des,'e'); // 计算'e'单个字符的地址,这个地址时绝对地址就是'e'在缓冲区内的地址,我们要转化为相对地址  
    cout << "place = " << place-des+1 << endl; // 相对地址为2  
}

Strstr函数的用法

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>  
#include <string.h>  
 
int main()  
{  
    char str[] = "This is a simple string";  
    char * pch;  
    pch = strstr(str, "simple"); // 求“simple”的第一个字符's'在字符数组中出现的绝对地址  
    std::cout << pch - str + 1 << std::endl; // 将“simple”的第一个字符's'在字符数组中出现的绝对地址转化为相对地址(结果为11)  
    return 0;  
}