#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main()
{
//1.scanf和printf除了多功能外,还比cin,cout效率更高,建议数据量大时使用scanf和printf
//2.string类型需包含<string>头文件,可以用cin,cout直接读写,scanf和printf不支持
//Example:
cout<<"Showing 2.cin,cout input/output std::string"<<endl;
string str;
cin>>str; //正确
cout<<str<<endl;//正确
// scanf("%s",str); //去掉注释编译错误
// scanf("%s",&str);//去掉注释溢出
// printf("%s",str);//去掉注释编译错误
//3.string类型需本质上也是char数组,可以用下标访问
//Example:
cout<<"Showing 3.use [x] to read/write std::string"<<endl;
string str2;
cin>>str2;
char a1=str2[0]; //正确
char a2=str2[1]; //正确
char a3=str2[2]; //正确
printf("%c %c %c\n",a1,a2,a3);//正确
//4.cin.getline()一共有3个参数,最后一个参数是结束标志(一个字符,可以省略,省略时为'\n'(换行))
//Example:
cout<<"Showing 4.cin.getline(char_type* __s, streamsize __n, char_type __delim)\'s 3rd input"<<endl;
char csz[10];
cin.getline(csz,10,'d'); //读到d停止,保存d之前的内容
printf("%s\n",csz);
//5.string小技巧
//(1)测量长度,string用x.length(),char数组用strlen(x)(需要<cstring>头文件)
//Example:
cout<<"Showing 5(1).use x.length() or strlen(x) to measure the length of std::string and char[]"<<endl;
string str3;
char csz2[10];
cin>>str3;
scanf("%s",csz2);
cout<<str3.length()/*str3的长度*/<<endl<<strlen(csz2)/*csz2[]存储的字符串的长度*/<<endl;
//(2)截取字符,x.substr(起始位置(由0开始数),结束位置)(只能string,值以返回值的形式带回,需要承接或输出
cout<<"Showing 5(2).use x.substr(a,b) to sub std::string"<<endl;
string str4;
cin>>str4;
cout<<str4.substr(1,3)<<endl;//截取str4第二个到第四个字符
//(3)连接字符串,三种方法
//[1] 用+或+=,左边一定是string,右边可以是char或string,值和普通+或+=一样
//Example:
cout<<"Showing 5(3)[1].use += to connect 2 strings"<<endl;
string str5,str6;
cin>>str5>>str6;
str5+=str6; //用+=连接
cout<<str5<<endl;
//[2] 用x.append(y)(只能string,值以返回值的形式带回,需要承接或输出)
//Example:
cout<<"Showing 5(3)[2].use x.append(y) to connect 2 std::strings"<<endl;
string str7,str8;
cin>>str7>>str8;
cout<<str7.append(str8)<<endl;
//[3] 用strcat(x1,x2)(只能char数组,值赋给x1)
//Example:
cout<<"Showing 5(3)[3].use strcat(x1,x2) to connect 2 char[]s"<<endl;
char csz3[10],csz4[10];
cin.getline(csz3,10);
cin.getline(csz4,10);
strcat(csz3,csz4);
printf("%s\n",csz3);
//番外:char*指针
//定义:char *pointer
//可以对它赋值为一个字符串或字符数组名,可使用cstring定义的函数
//功能较少,调试麻烦,不建议使用
//Example:
cout<<"Showing FW.char*"<<endl;
char *pointer,*pointer2;
char hlw[13]="Hello,World!";
pointer="Hello,World!";
pointer2=hlw;
cout<<"pointer="<<pointer<<endl;
cout<<"pointer2="<<pointer2<<endl;
//番外2:字符串解析函数sscanf(头文件<cstdio>)
//原型:int sscanf(const char* source,const char* format,...)
//在source中填一个字符数组名,后面跟scanf一样,sscanf会将source中的数据作为输入按格式付给相应的变量
//只能char数组或char指针,不兼容string
//Example:
cout<<"Showing FW2.sscanf"<<endl;
char csz5[13]="100-29.2-A",ch;
int integer;
float fl;
sscanf(csz5,"%d-%f-%c",&integer,&fl,&ch);
cout<<"int="<<integer<<endl<<"float="<<fl<<endl<<"char="<<ch<<endl;
return 0;
}