库函数
字符串函数
本文介绍了strcpy、strncpy、strstr、strlen函数。
strcpy
本函数的语法结构为:
char* strcpy(char *str1,cahr *str2)
其功能是将str2所指的字符串复制到字符串str1中去。
输出值是字符串指针str1。
char ch1[] = "hallo ";
char ch2[] = "word";
char *str1 = ch1;
char *str2 = ch2;
strcpy(str1, str2);
for (int i = 0; i < strlen(str1); i++)
{
cout << *(str1+i);
}
cout << endl;
运行以上函数
如图所示,str1所指的字符串被更改为“word”。
strncpy
本函数的语法结构为:
char * strncpy(char *str1,char *str2,int n)
其功能是将str2所指的字符串的前n项复制到str1所指的数组中,返回str1的地址。
如果str2的前n个字节不含NULL字符,则结果不会以NULL结束。如果str2的长度小于n,则会用NULL来填充剩下的那部分内容。
str1和str2所指的内存区域不可以重叠并且str1的长度要足够容纳str2.
char str1[15];
char str2[] = { "hallo" };
strncpy(str1, str2, 5);
for (int i = 0; i < 15; i++)
{
cout << str1[i];
}
cout << endl;
strncpy(str1, str2, 10);
for (int i = 0; i < 15; i++)
{
cout << str1[i];
}
cout << endl;
strncpy(str1, str2, 14);
for (int i = 0; i < 15; i++)
{
cout << str1[i];
}
cout << endl;
运行以上程序。
由于str1所指的内存用户没有初始化,被系统默认初始化为每个字节数都为0xc。将其按照字符形式每2字节输出为 “烫”
第一组输出为“hallo烫烫烫烫烫”其中,由于str2所指的前n(5)个字符中没有NULL字符,则复制结果没有空字符,则输出结果为“hallo”外加5个“烫”。
第二组数据由于复制了10个字节(n=10),那么不够的部分由NULL补齐,所以输出结果为“hallo”外加5个空再加2个“烫”,最后一个字节由于没有意义导致没有输出。
第三组数据复制了14个字节,所以输出结果为“hallo”外加9个空字符和最后一个无意义的0xc。
strlen
本函数的语法结构为:
unsigner int strlen(char *str);
其功能是统计字符串的长度,不包括结尾的空字符。
char a[] = { "hallo word!" };
cout << strlen(a) << endl;
strstr
本函数的语法结构为:
char* strstr(char* str1,char* str2);
其功能为在字符串str1中找出字符串str2第一次出现的地方。不包括str2的结束符。返回该位置的指针,否则返回空值。
char str1[] = { "hallo world" };
char str2[] = { "wo" };
char str3[] = { "aa" };
char *a = strstr(str1, str2);
char *b = strstr(str1, str3);
if (NULL==a)
cout << "未找到wo!" << endl;
else
for (int i = 0; i < strlen(str2); i++)
{
cout << a[i];
}
cout << endl;
if (NULL==b)
cout << "未找到aa!" << endl;
else
for (int i = 0; i < strlen(str3); i++)
{
cout << b[i];
}
cout << endl;
注意
本文使用的操作系统是Windows 7 64位处理器。
使用的软件是Microsoft visual studio 2015
在使用字符函数的时候,应该在源文件中添加以下命令
#include <string.h>