3.2
getline(cin,s);
cin>>s;
3.3
string类的输入运算符 碰到空白符会终止当前输入 ,而getline会将空白字符当做普通字符输入
3.4
string s,s2; cin>>s>>s2; if(s>=s2) cout<<s<<endl; else{ cout<<s2<<endl; }
3.5
string s,s1; while(cin>>s){ s1+=(s+" "); } cout<<s1<<endl;
3.6
string s="ceshi"; for(auto&c:s){ c='x'; } cout<<s<<endl;
3.7
没有影响
3.8
三者实现的结果一样,while循环和for循环需要知道字符串的长度,而范围不需要
3.9
不正确,会产生未定义的行为,发生越界
3.10
string s="dada.dafd,dds"; for(auto&c:s){ if(!ispunct(c)) cout<<c; }
3.11
不合法,当在循环中要改变c得值时,c的类型为const string&
3.12
1.正确 2.类型不符 3.正确
3.13
1.0 2.10个元素 值为0 3.10个元素 值为42 4.1一元素,值为10 5.2个元素, 6.10个元素 7.10个元素 为hi
3.14
vector<int> temp; int i; while(cin>>i){ temp.push_back(i); }
3.15
vector<string> temp; string i; while(cin>>i){ temp.push_back(i); }
3.16
vector<string>v{10,"hi"}; for(auto &s:v){ cout<<s; } for(int i=0;i<v.size();i++) cout<<v[i];
3.17
string s; vector<string>v; while(cin>>s){ for(auto&c:s) c=toupper(c); v.push_back(s); } for(auto i:v) cout<<i<<endl; //toupper
3.18
不合法,不能直接用下标给对象赋值,可能会访问未被定义的值,造成严重后果,
改用push_back();//该用法会引发一个内在的隐藏函数,扩大容器内存。
3.19
vector<int>v(10,42); vector<int>v1 for(i=0;i<10;i++) v1.push_back(42);
3.20
vector<int>svec; int i; while(cin>>i){ svec.push_back(i); } for(int i;i<svec.size()-1;i++){ cout<<(svec[i]+svec[i+1])<<endl; }
vector<int>svec; int i; while(cin>>i){ svec.push_back(i); } for(int i;i<svec.size()-1;i++){ cout<<(svec[i]+svec[svec.size()-1-i])<<endl; }
3.21
vector<string>svec{10,"hi"}; vector<string>::iterator it; it = svec.begin(); for(it = svec.begin();it!=svec.end();it++) cout<<*it;
3.23
vector<int>svec(10,1); vector<int>::iterator it; it = svec.begin(); for(it = svec.begin();it!=svec.end();it++) { *it=(*it)*2; cout<<*it; }
3.24
vector<int>svec{1,2,2,4,5}; vector<int>::iterator it; it = svec.begin(); for(it = svec.begin();(it+1)!=svec.end();it++) { cout<<(*it+*(it+1))<<" "; } cout<<"size is"<<svec.size()<<endl; for(it = svec.begin();it!=svec.end();it++) { cout<<(*it+*(svec.begin()+(svec.size()-1+svec.begin()-it)))<<" "<<endl; cout<<*it<<" "<<*(it+(svec.size()-1+svec.begin()-it))<<"it-begin is"<<it-svec.begin()<<endl; }
3.26
beg加上end与beg之间的偏移量还是迭代器。而(beg+end) 两个迭代器之和是不被允许的。我们只能用减法和表示两个迭代器之间的偏移量
3.27
1.存在越界索引,缓冲区溢出错误
2.下标越界
3.31
太简单,跳过
3.32
跳过
3.33
会产生未定义的错误
3.34
类似于p1=p2
3.35
int*p=a; for(int i=0;i<10;i++) *(p+i)=0;
3.36
int compareArray(void*a,void*b,size_t len) { int flag=0; char*p1=static_cast<char*>(a); char*p2=static_cast<char*>(b); while(len--){ if(*p1==*p2){ flag++; p1++; p2++; } else{ return -1; } } return 1; }
3.37
定义char字符数组。 用cp指针指向数组,并输出
3.38
指针保存的是地址。两个地址相加会产生无法定义的行为
3.39
//了解c风格字符串与string的区别 如何比较c风格字符串
比较c风格字符串需要用到strcmp函数
3.40
char ca[]={'h','e','l'}; char ba[]={'h','e'}; char da[100]; strcat(ca,ba); strcpy(da,ca);
3.41
int int_arr[]={0,1,2,3,4,5}; vector<int>ivec(begin(int_arr),end(int_arr));
3.42
跳过
3.43-3.45
三个题的方法是一样的。关键知识点有需要把多维数组理解为指针的指针。
理解下标在其中的作用