#C03L07P01. C03.L07.字符串入门.概述
C03.L07.字符串入门.概述
字符串可以作为一维字符数组来处理,那么字符串的输入和输出也可以按照数组元素来处理,上节课内容已经讲解。(字符数组和字符串有细微差别,比如:字符数组是一个一个赋值,字符串可以整体赋值也可以一个一个赋值等,后期做题可以慢慢体会)本节介绍将字符串作为一个整体进行输入和输出的语句。
单引号括起来的是字符:例如’a’是字符a,双引号括起来的才是字符串,例如”a”是字符串a
## 字符串输入
从键盘输入一个字符数组可以使用scanf(cin)语句或getline语句。
### (1) cin语句
cin可以适用于字符数组和string变量。
string a;
cin>>a;
char s[100];
cin>>s;
cin>>s1>>s2>>s3;
从键盘分别输入Let us go,则三个字符串分别获取了三个单词。反过来可以想到,如果仅有一个输入字符串名称的情况下,字符串变量仅获取空格前的内容。
cin>>s1;
从键盘分别输入Let us go,则仅有第一个单词被获取,即s1变量仅获取第一个单词 {{ input(1) }} 。
### (2)scanf语句
scanf函数只能针对char数组赋值。
char s2[100];
scanf("%s",s2); //scanf的第二个参数要填数组名称,其实单独写s2的时候,表示的是s2这个数组的内存地址
char s3[100];
scanf("%s",s3+1); //s3等同于s3[0]的地址,s3+1 等同于s3[1]的地址。本语句的意思是接收的字符信息放在从s3[1]开始的位置,跳过了s3[0],这对于有时候希望从下标1开始是很有用的
如果希望用scanf接收字符串并赋值给string变量,可以参考下面的例子
char s[100];
scanf("%s",s);
string a;
a=s; //这句的意思是把字符数组s的内容初始化成一个string类实例返回给string 变量 a
### (3)getline语句
格式:getline(cin,字符串名称);
说明:使用getline只能输入一个字符串。
例如:getline(cin,s1,s2);
是错误的。使用getline,是从光标开始的地方读到换行符也就是说读入的是一整行,而使用scanf是从光标开始的地方到空格,如果这一行没有空格,才读到行尾。
有例如:对于相同的输入 Hello World! ,scanf(“%s”,s1);
s1 获取的结果仅仅是 {{ input(2) }} ,而getline(cin,s2);
s2 获取的结果则是 {{ input(3) }}
## 字符串输出
向屏幕输出一个字符串可以使用printf语句或cout语句。
(1)printf语句
格式:
-
printf("%s",字符数组名称); //printf不能用于string类的直接输出
-
下面是错误例子
string a="1234";
printf("%s",a);`
说明:
-
用 %s 格式输出时,printf 的输出项只能是字符数组名称,而不能是数组元素。例如:printf("%s",a[5]);是错误的。
-
输出字符串不包括字符串结束标志符'\0'。 printf函数遇到'\0'的时候就结束输出了,如果字符数组没有'\0',调用printf输出的时候很可能会输出错误的信息。
PS:计算字符串的长度,使用size()函数;
例如:string s;
s.size()为计算字符串s目前存储字符的总个数
(2)cout语句
cout语句适用于对字符数组或者string类变量,参见下面的例子:
string a;
cin>>a;
cout<<a<<endl;
char s[100];
scanf("%s",s);
cout<<s<<endl;
## string 和 char数组的转换
string类和char数组有着密切的关系,但是两者又各自有一套函数。对于信息学考生初级到中级水平的学生而言,有几点建议
-
尽量搞熟一套,要么string,要么char数组。两套都搞得很熟太难。
-
如果一条题目要围绕着字符串做几个事情,有一部分的事情用string来做比较方便(或者是因为你记得string的某个函数),而做另外的事情用char数组来做方便,那这时候就存在着两者的转换。
把string的内容赋值给char数组:
string a="abcdef";
char s[100];
strcpy(s,a.c_str()); //c_str()是string的成员函数,可以把string的内容放入一个字符数组中,并返回字符数组的地址;而strcpy则是把第二个参数(字符数组)的内容拷贝到第一个参数(也是字符数组)
把char数组的内容赋值给string变量:
string a;
char s[100];
scanf("%s",s);
a = s; //
对于小朋友而言,每记多一样东西都容易出错,所以,尽量避免string和char之间的转换
相关
在以下作业中: