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

三个题的方法是一样的。关键知识点有需要把多维数组理解为指针的指针。

理解下标在其中的作用