Char 数组像string一样有很多函数or操作

1-1 sscanf和sprintf函数,面向字符串的输入输出流

在我看来就是从字符串中输入数据,而不是像scanf从键盘键入数据
虽然很少用到, 但是书到用时方恨少! believe me

1-1-1 sscanf函数

sscanf 读取格式化的字符串中的数据–百度百科
TA常用来字符串和数字的转换,很好使,不用自己系一大堆代码了。Orz。。。

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
int main(){    
// s="0123456789";

char ss[100]="123abc(DEFghijk)";
char sss[100]="z123abc(DEFghijk)";
char ss1[100];
char ss2[100];
char ss3[100];
char ss4[100];
char ss5[100];
sscanf(ss,"%s",ss1);//1
sscanf(ss,"%8s",ss2);//2
sscanf(ss,"%[^(]",ss3);//3
sscanf(ss,"%[^a-z]",ss4);//4
sscanf(ss,"%[1-9,a-z,A-Z,(]",ss5);//5

int x;
cout<<x<<'\n';

sscanf(ss,"%d",&x);///传地址

cout<<x<<'\n';
puts(ss1);
puts(ss2);
puts(ss3);
puts(ss4);
puts(ss5);
}

Output:

1
2
3
4
5
6
7
0
123
123abc(DEFghijk)
123abc(D
123abc
123
123abc(DEFghijk

这个函数中间参数有很多,什么转化为16进制,8进制之类的.

(上面代码有标号) 1号行代码:ss是一个字符串,然后”%s”意思是转化为字符串,然后赋给ss1,作用就是 ‘=’ 。如果中间使”%d”,那么就会起到字符串转化数字的作用了,实例中得到整数123,赋给ss1,ss1是char类型,”{“的ASCII码是123,所以字符串ss1就是单个字符”{“.

2号行代码:”%8s”中间的数字8表示从头开始,一共取8个字符。

3号行代码:”%[^(]”表示读到’(’结束,注意里面不要乱打空格,%[^ ]表示到空格结束,读不进空格。

4号行代码:”%[^a-z]”表示读到小写字母就结束,小写字母读不进。
“^”符号表示到什么符号停止,大概就是非的意思。”%[]”这玩意貌似叫字符集

5号行代码:%[a-z,A-Z,0-9]意思是读小写,大写字母,数字0-9,后面加个”,”还可以继续加可读入符号。

1-1-2 sprintf函数

sprintf指的是字符串格式化命令,主要功能是把格式化的数据写入某个字符串中–百度百科
主要作用与sscanf相反,是将数字转变成字符串,代码:

1
2
3
4
sprintf(ss1,"%d",123);
sprintf(ss2,"%4d%4d",123,456);
puts(ss1);
puts(ss2);

Output:

1
2
123
123 456

1-2 以atoi函数为代表的一系列函数,C标准库函数

1-2-1 atoi()函数,ascii to integer

作用是将字符串转化为整型数,未执行有效转换则返回0,比喻说字符串中全是字母时。

1
2
3
4
5
6
char ss4[100]="1234asdf";
char ss5[100]="asdf1234";
int x=atoi(ss4);
int x1=atoi(ss5);
printf("%d\n",x);
printf("%d",x1);
1
2
1234
0

1-2-2 atof()函数,。。。to f 浮点数

1
2
3
4
5
6
char ss4[100]="1234.1234";
char ss5[100]="asdf1234";
double x=atof(ss4);
double x1=atof(ss5);
printf("%lf\n",x);
printf("%lf",x1);
1
2
1234.123400
0.000000

用到的时候就很6, 学了很鸡肋…

1-2-3 atol()函数 ,长整型

1
2
3
4
5
6
7
8
9
10
11
12
13
char ss3[100]="-2147483648";
char ss4[100]="2147483647";
char ss5[100]="asdf1234";
long long int x0=atol(ss3);
long long int x=atol(ss4);
long long int x1=atol(ss5);
printf("%lld\n",x0);
printf("%lld\n",x);
printf("%lld",x1);
//输出:
//-2147483648
//2147483647
//0

这个函数我试着有点问题,超出int范围之后,返回的数就很哲学.

1-3 tolower() and toupper()

1
2
3
4
5
6
char c='C';
c=tolower(c);
putchar(c);
cout<<'\n';
c=toupper(c);
putchar(c);

tolower转换成小写字母,toupper转换成大写字母,括号中的参数应该是一个int型数,(字符c自动转化成ascii码)