0%

字符串操作

字符串操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
cin:getline(char *,int n);//输入操作

* strlen(str);//计算字符串长度

* strcpy(str1,str2);//字符串赋值(将str2赋给str1)

* strtok(str,c)//字符串分割函数(对字符串按照字字符串c(可以是单个字符)进行分割,返回分割后的子字符串)
{
char str[20]="china,chinese";
char * token;//返回值为指针
char c[2]=',';
token=strtok(str,c);
while(token!=NULL)
{
printf("%s\n",token);
token = strtok(NULL,c);//继续分割
}
//output
china
chinese
}

* strcat(str1,str2);//字符串拼接函数,将str2字符串拼接到str1字符串后(!!!str1定义长度,必须大于拼接后的字符串长度)

* atoi(str);//将字符串str转为整形(支持正负数识别)
{
char a[10]="100";
int val=atoi(a);
cout<<val<<endl;
//output
100
}

* atof(str);//将字符串str转为浮点型(支持正负数识别)

* atoi()和atof()有个缺点就是如果字符串是其他非数字字符,就会返回0,如果是数字0的话,照样返回0,这样就无法识别到底是字符'0'还是其他非数字字符。此时需要另一个函数:
strtol()//字符串转整形
{
long int strtol(const char*str,char *endptr,int base);//将字符串str根据base转成对应进制数,并将转后结果作为函数结果返回;endptr指针指向原字符串中转化字符串的下一个字符
char str[20]="0";
char *endpty;
int val;
val = strtol(str,&endpty,8);//这里的base为8,指的是将字符串中的数字作为进制去识别,转化为十进制输出,则有效识别数字为1~7,9为无效字符,则到9时停止
if(endpty!=str)
{
cout<<val<<endl;
cout<<endpty<<endl;
}
else
{
cout<<"转化的是字符!"<<endl;
}
//output
543
9cend$3
}

* strcmp(const char*s1,const char*s2)//字符串比较,若s1==s2则返回0;若s1<s2则返回负数;若s1>s2则返回正数(两个字符串自左向右逐个字符比较(按ASCII值大小相比较),直到出现不同的字符或遇到'\0'为止)

* strstr(const char*s1,const char*s2);//字符串查找,用于查找s2在s1中的位置。返回s1中第一次出现s2的指针;如果s2不是s1的一部分,则返回空指针。
{
char s1[10]="aabb";
char s2[10]="ab";
char *value;
value=strstr(s1,s2);
if(value!=NULL)
{
cout<<value<<endl;
}
else
{
cout<<"找不到"<<endl;
}

//output
abb
}

*char * strerror(int errnum);//用于获取指向错误消息字符串的指针。返回值为char*类型;