字符串操作函数
C语言中几个处理字符串的函数都是以str开头,处理时默认遇到\0
结束操作
这些字符串函数都使用了下面这个头文件:
#include <string.h>
测量字符串的长度strlen
函数原型
size_t strlen(const char *s)
//s指需要测量的字符串首元素地址
注意,测量时不计入
\0
代码
#include <iostream>
#include <string.h>
using namespace std;
int main(int argc, char *argv[])
{
char a[]="hello";
char b[]="he\0llo";
cout<<strlen(a)<<endl;
cout<<strlen(b)<<endl;
return 0;
}
运行结果
字符串拷贝函数strcpy
函数原型
char* strcpy(char* dest,const char* src);
char* strncpy(char* dest,const char * src,size_t n);
说明
dest:目的空间地址(空间容量注意准备充足)
souce:原字符串首元素地址
strncpy函数优先考虑\0
,接着考虑拷贝字节个数。即如果还没拷贝够n个就遇到\0
则可以结束.
代码1
#include <iostream>
#include <string.h>
using namespace std;
int main(int argc, char *argv[])
{
//size_t strlen(const char *s);
char a[128]="";
char x[]="";
char b[]="hello world";
char c[]="hello wor\0ld";
cout<<strcpy(a,b)<<endl;
cout<<strcpy(a,c)<<endl;
cout<<strcpy(x,b)<<endl;//内存污染
/*
char x[]="";默认隐含了\0,因此x被初始化为1字节空间,因此b拷贝到x会溢出,造成内存污染
*/
return 0;
}
运行结果
代码2
#include <iostream>
#include <string.h>
using namespace std;
int main(int argc, char *argv[])
{
//size_t strlen(const char *s);
char a[128]="";
char x[]="";
char b[]="hello world";
char c[]="hello wor\0ld";
cout<<strncpy(a,b,7)<<endl;
cout<<strncpy(a,c,12)<<endl;
return 0;
}
运行结果
字符串追加函数strcat
函数原型
char *strcat(char *dest, const char *src)
说明
把stc追加到dest尾部.
#include <iostream>
#include <string.h>
using namespace std;
int main(int argc, char *argv[])
{
char h[128]="hello ";
char w[]="World";
cout<<strcat(h,w)<<endl;
return 0;
}
运行结果
字符串比较strcmp
函数原型
int strcmp(const char *s1,const char *s2);
int strncmp(const char *s1,const char *s2,size_t n);
说明:
返回值
>0 则s1字符串 >s2 字符串
<0 则s1字符串 <s2 字符串
==0 则s1字符串 ==s2 字符串
参数n则表示最多比较前n个字符
字符串比较的是ASCII码值,如果已确定某字符大于另一个则不会比较后续字符.
代码
#include <iostream>
#include <string.h>
using namespace std;
int main(int argc, char *argv[])
{
char a[128]="";
char b[128]="";
cout<<"请输入第一个字符串";
cin>>a;
cout<<"请输入第二个字符串";
cin>>b;
cout<<a<<endl;
cout<<b<<endl;
if(strcmp(a,b)>0)
{
cout<<a<<"大于"<<b<<endl;
}
else if(strcmp(a,b)<0)
{
cout<<a<<"小于"<<b<<endl;
}
else
{
cout<<a<<"等于"<<b<<endl;
}
return 0;
}
运行结果
代码2
#include <iostream>
#include <string.h>
using namespace std;
int main(int argc, char *argv[])
{
char a[128]="";
char b[128]="";
cout<<"请输入第一个字符串";
cin>>a;
cout<<"请输入第二个字符串";
cin>>b;
cout<<a<<endl;
cout<<b<<endl;
if(strncmp(a,b,1)>0)
{
cout<<a<<"大于"<<b<<endl;
}
else if(strncmp(a,b,1)<0)
{
cout<<a<<"小于"<<b<<endl;
}
else
{
cout<<a<<"等于"<<b<<endl;
}
return 0;
}
运行结果