本文较为全面地总结了字符串的输入和输出,以及C++String类型常用函数等知识内容,其中包括对字符、字符数组、字符串、字 符串数组、字符串流的定义和输入输出的用法,对C/C++字符串的输入输出不同方法的使用和特性进行了对比归纳,C++中 的String的常用函数用法总结。
供读者学习参考,有错误不严谨之处请评论指出!原创不易,不点个赞在走吗?~ヾ(*ΦωΦ)ツ
文章图片
文章目录
字符数组赋初值的方法
字母:a,b,c...z数字:0,1,2,9标点:+,-,*,/,;等等控制字符:Tab, Enter,Space等等
char names1[4];
name1={'x','c','a','s'};
注意:这里的括号是{}而不是();char names2[4];
name2="xcas";
//字符个数小于等于4
注意:字符个数应小于等于分配的字符空间个数大小;char name1[5];
for(char & i : name1){
cin>>i;
}//输入
for(char i : name1){
cout<char name1[5];
cin>>name1;
//直接cin>>name1;
cout<注意:使用cin>>和cout<<进行输入输出连续多个字符数组的时候会出现乱码异常等错误。。。string str1,str2;
string str3="hello,world!";
string a="sa";
char b=a[1];
cout<stringstr4("computer");
stringstr5(str4);
stringstr6(5,'A');
stringstr7("computer",12);
//等价于 "computer" 存入str7中,最多存储12个字节
stringstr8(8,'A')//存储8个 'A' 到 str8中
string bookName[5];
//定义
string stu[3]={"std","sq1","sq2"};
//赋初值
cin>>str;
cout<string str;
getline(cin,str);
cout<;
getline(cin, str,',');
两个字符串变量可以进行连接操作。两个字符串常量不能进行连接操作。string str1("aqs"),str2;
str2=str2+str1;
//变量字符串+常量字符串√,常量字符串+变量字符串×
cout<;
字符串str1和str2比较的依据是字符的 ASCII码值:Ⅲ.字符串的输入输出常见方法的总结及解释 a:getchar()与putchar()
①如果str1和str2的长度相等,而且各对应字符也完全相同,则认为两串相等。
②如果str1和str2的对应字符不完全相同,则比较第一对不相同字符的ASCI码值,ASCI码值小的字符所在串小。
③如果str1的长度n1小于str2的长度n2,而且两个字符串的前n1个对应字符都相同,则认为str1小。
#include
using namespace std;
int main(){
char ch;
ch=getchar();
//输入单个字符;
putchar(ch);
//输出单个字符;
return 0;
}
b:scanf()与printf()
- 使用时,必须包含头文件“#include ”。
- getchar()与putchar()不会忽略任何一个字符,包括换行 ,tab,enter在内。
- 只输入输出单个字符。
char a[100],b[100];
scanf("%s",&a);
scanf("%s",&b);
printf("%s",a);
printf("%s",b);
char a,b,c;
scanf("%c%c%c",&a,&b,&c);
printf("%c%c%c",a,b,c);
c:gets()与puts()
- scanf()以非空白符开始,空白符结束,完成一个%s的录入; printf()从当前位置打印到‘\0’结束。(连续输入输出多个字符串不会受到"\n"(换行符)的影响!)
- %c格式化单个字符,%s格式化输入输出整个字符串。
- 使用时,需包含"#include“或者”#include"。
- scanf()和printf()仅支持字符数组,不支持string类型元素。
gets()与puts()均不支持string类型元素,示例如下:char a[100];
//string a;
报错,不支持string类型元素;
gets(a);
puts(a);
d:cin>>与cout<<
- gets()类似于于scanf()+%s,接受tab和space键,只对Enter敏感。
puts效果与printf()+%s效果一致,均为从当前指针输出至’\0’。- gets()和puts()仅支持字符数组,均不支持string类型元素。
#include
using namespace std;
int main() {
char name1[10],name2[10];
cin>>name1;
cout<>name2;
cout< e:cin.get()与getline()
同时支持字符数组、字符串、字符串数组多个类型数据的输入输出。支持连续多个字符数组的输入输出使用。- 根据后面的变量的类型读取数据,读取时结束条件:enter, space, tab,对结束符的处理:丢掉。
- 当定义多个字符数组时,分配的数组空间要大一些,避免字符数组中元素溢出。
支持输入格式:“ab”,代码如下:char c1, c2;
cin.get(c1);
cin.get(c2);
cout<支持输入格式:“a b”和"a"+"\n"+"b":char c1, c2;
cin.get(c1).get();
cin.get(c2);
cout<
cin.rdstate():返回流状态;cin.clear():状态位清零;cin.failbit():如果输入操作未能读取预期的字符或输出操作没有写入预期的字符,设置为1。
char str[20];
//输入提示:abcdefg
cin.getline(str,5);
cout << str << endl;
//输出:abcd
cout << "read state: " << cin.rdstate() << endl;
//read state: 4
cin.clear(cin.rdstate() & ~cin.failbit);
cout << "read state: " << cin.rdstate() << endl;
//read state: 0,继续读取剩余的字符流
cin.getline(str,5);
cout << str << endl;
//输出:efg
return 0;
getline(cin, str,',');
int n;
cin >> n;
cin.ignore();
string c;
getline(cin, c);
cout << c << endl;
Ⅳ.字符串流 字符串流的定义和分类
- 相同点:cin.getline()与cin.get()函数都可以读取整行的字符串。都可指定读取多少个字符到数组,读取完后剩余的字符放在流中。
- 区别:cin.getline() 能够读取回车键,并将之转化为换行符。这样就不会留一个回车键在输入流而对下一个字符串的输入造成影响。而cin.get()不能够读取回车键,而是将其继续留在输入流中,这样有个弊端就是回车键会对下一个回车键造成影响。
- getline(&address,&string)支持指定输入的起始地址位置,例如:string c; getline(cin, c); 而cin.get()不支持指定地址位置输入字符串。
- getline函数允许编程人员指定分隔符。
- getline()支持从缓冲流中获取剩余的字符。
字符串流,即内存中的输入输出。分为以下三类:ofstream和ostringstream字符串流的示例:
istringstream(输入流)ostringstream(输出流)ofstream(文件流)
#include
#include
#include
using namespace std;
int main(){
//cout是输出流对象,ostream
cout <<"hello!"<内存
ostringstream oss;
oss<<"hello!"< #include
#include
#include
using namespace std;
int main(){
ostringstream formatmessage;
formatmessage<<"姓名:"<<"张飞"<<"\n"
<<"体重:"<<65.1<<"\n"
<<"年龄:"<<26<<"\n";
cout<<"输出张飞的信息:\n"<>name;
cout<>kg;
cout<>age;
cout<
注意:%c类似于getchar(),不会跳过任何一个字符,包括空格,tab,‘\n’等。
上一篇:坑记-float、memcmp
下一篇:打开的大脑盖子如何关上