一. cin>>s:
cin>>是由两部分构成的,cin和>>,其中cin是输入流istream类的一个对象,隶属于iostream函数库
而>>则是运算符:这个运算符的作用是:从左侧cin对象中读取数据,并将它赋给右侧的运算对象.
1.>>运算符是由右侧的数据类型定义的,右侧的数据类型不同,重载的>>也不同
2.>>运算符是向左结合的
3.>>运算符从cin对象中读取数据时:如果遇到空格或者换行符号,那么这次读取数据结束,将空格之前的数据赋给右侧的运算对象,相应的,读取的第一个符号,也是空格或者换行符之后的第一个有效数据
4.一个>>运算符一次只能读取一次(一个)数据,要想读取多个数据,只能再加>>运算符
二.getline()
1.它是String对象定义的,只能string对象用(当然<<也是String对象重载的)
2.**getline遇到空格不结束!!!也就是说它可以从cin对象中读取空格!!**当然,遇到换行仍然结束,但是他也会读取换行符,但是读取换行符之后后停止读取,然后将读取的数据(此时包括换行符)赋给右侧的运算对象(x,见下),赋值的时候,丢弃换行符!!!,也就是说换行符不存到x中
getline的返回值是流参数和cin>>表达式一样,返回cin>>
3.getline是一个函数的形式:
**总结:使用getline必须使用string定义的字符串,并且cin不能读空格或者换行符。但是getline不受影响
————————————————
版权声明:本文为CSDN博主「birate_小小人生」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014183456/article/details/88323575
代码1
#include<bits/stdc++.h>
using namespace std;
int main(){
int i,ans=0;
string s;
int num[26]={1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4};
getline(cin,s); //如果改成cin>>s; 则会出现错误
for(i=0;i<s.length();i++){
if(s[i]>='a'&&s[i]<='z'){
ans+=num[s[i]-'a'];}
if(s[i]==' '){
ans++;}
}
cout<<ans;
return 0;
}
代码2
#include<bits/stdc++.h>
using namespace std;
int main()
{
int ans=0;
map<char,int>ma; //定义map,把char类型转化成int 此处不能用string,因为string的+不是数字相加!!
ma['a']=1;ma['b']=2;ma['c']=3;ma['d']=1;ma['e']=2;
ma['f']=3;ma['g']=1;ma['h']=2;ma['i']=3;ma['j']=1;
ma['k']=2;ma['l']=3;ma['m']=1;ma['n']=2;ma['o']=3;
ma['p']=1;ma['q']=2;ma['r']=3;ma['s']=4;ma['t']=1;
ma['u']=2;ma['v']=3;ma['w']=1;ma['x']=2;ma['y']=3;
ma['z']=4;ma[' ']=1;
string word;
getline(cin,word);
for(int i=0;i<word.length();i++)
{
ans=ans+ma[word[i]];
}
cout<<ans<<endl;
}