字符串
标签(空格分隔): @zhshh 字符串
我是C++er。。。
字符串有string
(c++提供的)和cstring
(从C里面带过来的)
就从我个人角度来看还是比较喜欢用string(不过听说从cstring要更快,因为只是连续的字符(char)接在一块的数组(可能不严谨))
C++ reference官方文档
下面的代码默认省略如下头文件了
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
先从cstring谈起
输入输出
cin,cout,printf,scanf都可以
printf,scanf输出占位符是%s,而字符是%c
strcpy 复制
char * strcpy ( char * destination, const char * source );
来源字符串可以使常量,也可以是cstring
int main(){
char a[]="The char program";
char b[40],c[40];
strcpy(b,a);
strcpy(c,"is successful");
printf("%s__%s",b,c);
// cout<<b;//cout也可以
}
输出
The char program__is successful
strcat 连接
char * strcat ( char * destination, const char * source );
同上,来源也可以是常量或者变量
int main(){
char a[]="The char program";
char b[40],c[40];
strcpy(b,a);
strcat(b," !@#@!");
strcpy(c,"is successful");
printf("%s__%s",b,c);
// cout<<b;
}
strcmp 比较字典序
int strcmp ( const char * str1, const char * str2 );
就按照英语字典理解就行
c++reference 官方
return value indicates
result<0 the first character that does not match has a lower value in ptr1 than in ptr2
result=0 the contents of both strings are equal
result>0 the first character that does not match has a greater value in ptr1 than in ptr2
返回值 指示
<0 第一个不匹配的字符在ptr1中的值比在ptr2中的值低
0 两个字符串的内容是相等的
0 第一个不匹配的字符在ptr1中比在ptr2中有更大的值
如果字符串包含,则长的更大,否则ascii码大的更大
int main(){
char a[50],b[40];
while(1){
scanf("%s%s",&a,&b);
printf("%d\n",strcmp(a,b));
}
}
qwerty qwerty
0
123 1234
-1
213 21
1
a A
1
0 A
-1
注:
0 48——————A 65————————a 97
引用百度ASCII码对照表
注意最后一句话,可以用小键盘验证
strcmp只与内容有关,与长短无关
int main(){
char a[50]="aaa",b[40]="aaa";
printf("%d",strcmp(a,b));
}
//OUTPUT:0
其他
strchr 寻找字符
const char * strchr(const char * str,int character);
char * strchr(char * str,int character);
在C中,这个函数只声明为: 而不是C ++提供的两个重载版本。
char * strchr ( const char *, int );
strlen 取字符串长度
//来自于 c++ reference
/* strlen example */
#include <stdio.h>
#include <string.h>
int main ()
{
char szInput[256];
printf ("Enter a sentence: ");
gets (szInput);
printf ("The sentence entered is %u characters long.\n",(unsigned)strlen(szInput));
return 0;
}
Enter sentence: just testing The sentence entered is 12 characters long.
memset 内存填充
一般在cstring用的并不是很多,但是在其他地方很常用
因为他是按照内存字节填充,所以有一种说法
memset 只可以填充0或者-1
并不完全正确
比如int是4字节的,int a[100],然后memset(a,1,sizeof(a))会产生
00000001 00000001 00000001 00000001 00000001......
重复400个(4*100)
这样就是16843009(十进制)或者是0x01010101(十六进制)
比如要填充无穷大,(0x3f3f3f3f),只需memset为0x3f即可