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

    技术2022-07-10  100

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

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

     

    Strcmp函数用法

    #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函数的用法

    #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' 也会拷贝过去哦。

    #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函数的用法

    #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函数的用法

    #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函数的用法

    #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;   } 

     

    Processed: 0.051, SQL: 9