标准库类型(string,getline,vector)

标准库类型(string,getline,vector)

string对象的初始化:

string s1;        默认构造函数,s1为空串;

string s2(s1);        将s2初始化为s1的一个副本

string s3("value");          将s3初始化为一个字符串字面值副本

string s4(n,'c');            将s4初始化为字符'c'的n个副本

</pre><pre name="code" class="cpp">

string 对象的读写:

(1)读取并忽略开头所有的空白字符(如空格,换行,制表符)。

(2)读取字符直至再次遇到空白字符,读取终止。

如:

int main()
{
    string s1,s2;
    cint >> s2 >> s2;
    cout << s1 <<s2 <<end;
}

如果输入到程序的是"     hello   world    !",则屏幕上输出"helloworld".

string 对象的操作:

s.empty()            如果s为空串,则返回true,否则返回false

s.size()                返回s中字符的个数

s[n]                      返回s位置为n的字符,位置从0开始计数

s1 + s2               把s1和s2连接成一个新字符串,返回新生成的字符串

s1 = s2               把s1内容替换为s2的副本

v1 == v2              比较v1与v2的内容,相等则返回true,否则返回false

当进行string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个是string类型的:

string s=s1+","   ok

string s = s1 + ",", + "world";    ok

string s = "hello" + ",";   error

string 对象中字符的处理:

isalnum(c)                           如果c是字母或数字,则为true

isalpha(c)                            如果c是字母,则为true

iscntrl(c)                               如果c是控制字符,则为true

isdigit(c)                               如果c是数字,则为true

isgraph(c)                            如果c不是空格,但可以打印,则为true

islower(c)                             如果c是小写字母,则为true

isprint(c)                               如果c是可打印的字符,则为true

ispunct(c)                             如果c是标点符号,则为true

isspace(c)                           如果c是空白字符,则为true

isupper(c)                            如果c是大写字母,则为true

isxdigit(c)                             如果c是十六进制数,则为true

tolower(c)                            如果c是大写字母,则返回其小写字母形式,否则直接返回c

toupper(c)                           如果c是小写字母,则返回其大写字母形式,否则直接返回c

用getline读取整行文本

只要getline遇到换行符,即便它是输入的第一个字符,getline也将停止读入并返回,如果第一个字符就是换行符,则string参数将被设置为空string。

<span style="font-size:18px;">int main()
{
   string line;
   while(getline(cin,line))
          cout << line <<endl;
    return 0;
}</span>
<span style="font-size:18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">习题3.5:</span>
<span style="font-size:18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">编写程序<span style="font-size:18px;">实现从标准输入每次读入一行文本,然后改写程序,每次读入一个单词。</span></span>
<span style="font-size:18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="font-size:18px;">int main()
{
     string s1;
     while(getline(cin,s1))
     {
          cout << s1 <<endl;
     }
     return 0;
}
</span></span>
<span style="font-size:18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="font-size:18px;">int main()
{
     string s1;
     while(cin >> s1)
     {
          cout << s1 <<endl;
     }
     return 0;
}
</span></span>

vector类型:

vector<int> ivec;

上面的第一个定义,类型是vector<int>,该类型即是含有若干int类型对象的vector,变量名为ivec.vector不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型。vector类型的每一种都指定了其保存元素的类型。因此,vector<int>和vector<string>都是数据类型。

vector对象的定义和初始化:

vector<t> v1;           vector保存类型为t的对象,默认构造函数,v1为空

vector<t> v2(v1);      v2是v1的一个副本

vector<t> v3(n,i);      v3包含n个值为i的元素

vector<t> v4 (n);       v4含有值初始化的元素的n个副本

当把一个vector对象复制到另一个vector对象时,新复制的vector中每一个元素都初始化为原vector中相应元素的副本,但这两个vector对象必须保存同一种元素类型。

vector 对象的操作:

v.empty()         如果v为空,则返回true,否则返回false

v.size()             返回v中元素的个数

v.push_back(t)     在v的末尾增加一个值为t的元素

v[n]                   返回v中位置为n的元素

v1=v2              把v1的元素替换为v2中元素的副本

v1==v2          如果v1与v2相等,则返回true

vector实例1:

int main()
{
    int x;
        /*用下标计算并输出每对相邻元素的和,如
    果读入元素个数为奇数,则提示用户最后一个元素
    没有求和,并输出其值,然后修改程序,头尾元素两两
    配对,计算每对元素的和并输出*/
    vector<int> a;
    while(1)
    {
         cin >> x;
         if(x==0) break;
         a.push_back(x);
    }
    cout << a.size() << endl;


    for(vector<int>::size_type ix=0;ix<a.size()-1;ix+=2)
    {
         cout << a[ix]+a[ix+1] << endl;
    }
    if(a.size()%2!=0)
    cout << "最后一个没有求和:" << a[a.size()-1] << endl;


     vector<int>::size_type iy=0,iz=a.size()-1;
    while(iy<iz)
    {
         cout << a[iy]+a[iz] << endl;
         iy++;
         iz--;
    }
    if(iy==iz)
    cout << "中间有剩余: " << a[iy] << endl;
    /*用迭代器计算并输出每对相邻元素的和,如
    果读入元素个数为奇数,则提示用户最后一个元素
    没有求和,并输出其值,然后修改程序,头尾元素两两
    配对,计算每对元素的和并输出*/
    vector<int> b;
    while(1)
    {
         cin >> x;
         if(x==0) break;
         b.push_back(x);
    }
    cout << b.size() <<endl;
    for(vector<int>::iterator iter=b.begin();iter!=b.end()-1;iter+=2)
    {
         cout << *iter+*(iter+1) <<endl;
    }
    if(b.size()%2!=0)
    cout <<"最后一个数没有求和: "<< *(b.end()-1) <<endl;


    vector<int>::iterator first=b.begin(),last=b.end()-1;
    while(first<last)
    {
         cout << *first + *last << endl;
         first++;
         last--;
    }
    if(first==last)
    cout<<"居中元素没有求和: " << *first <<endl;


     return 0;
}

vector实例2:

int main()
{
     /*
     读入一段文本到vector对象,每个单词存储为vector中的一个元素
     把vector对象中每个单词转化为大写字母
     输出vector对象中转化后的元素,每8个单词为一行输出
     用下标访问vector中的元素
     */
     vector<string> str;
     string ch;
     while(cin >> ch)
     {
          if(ch=="aaa")
          break;
          for(int i=0;i<ch.length();i++)
          {
               ch[i]=toupper(ch[i]);
          }
          str.push_back(ch);
     }
     for(vector<string>::size_type ix=0;ix!=str.size();ix++)
     {
          cout << str[ix] <<" ";
          if((ix+1)%8==0)
          cout << endl;
     }


        /*
     读入一段文本到vector对象,每个单词存储为vector中的一个元素
     把vector对象中每个单词转化为大写字母
     输出vector对象中转化后的元素,每8个单词为一行输出
     用迭代器访问vector中的元素
     */
     vector<string> str1;
     string ch1;
     while(cin >> ch1)
     {
          if(ch1=="aaa") break;
          for(int i=0;i<ch1.length();i++)
          {
               ch1[i]=toupper(ch1[i]);
          }
          str1.push_back(ch1);
     }
     vector<string>::size_type cnt=0;//定义
     for(vector<string>::iterator iter = str1.begin(); iter != str1.end(); iter++)
     {
          //使用类型为vector<string>::iterator的迭代器,访问元素类型为string的vector对象中的元素
          cout << *iter <<" ";
          cnt++;
          if(cnt % 8 == 0) cout << endl;
     }
     return 0;
}


vector实例3:

int main()
{
     /*
     编写程序来创建有10个元素的vector对象,用迭代器把每个元素值改为当前值的2倍。
     */
     vector<int> num(10,5);
     for(vector<int>::iterator iter=num.begin(); iter != num.end(); iter++)
     {
          //使用类型为vector<int>::iterator的迭代器,访问元素类型为int的vector对象中的元素
          *iter = (*iter)*2;
          cout << *iter <<" ";
     }


     return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值