关于字符串string和vector的一些简单处理

将string的首字符变成大写字母并输出

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s("some string");
    if(!s.empty())
        s[0] = toupper(s[0]);
    cout<< s << endl;
    /*用迭代器实现
    if(s.begin() != s.end())
    {
        auto it = s.begin();
        *it = toupper(*it);
    }
    cout<<s<<endl;
    */
    return 0;
}

PS:其实就是一个toupper()的使用,将一个字符转换成它的大写字符。

将string的第一个单词都变成大写字母

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s("some string");
    for(decltype(s.size()) index = 0;index != s.size() && !isspace(s[index]);++index)
        s[index] = toupper(s[index]);
    /*用迭代器来实现
    for(auto it = s.begin(); it != s.end() && !isspace(*it); ++it)
        *it = toupper(*it);
    */
    cout<< s <<endl;
    return 0;
}

想要编写一个程序把0到15之间的十进制数转换成对应的十六进制的形式

#include <iostream>
#include <string>
using namespace std;
int main()
{
    const string hexdigits = "0123456789ABCDEF";
    string result;
    string::size_type n;
    while (cin >> n) {
        if (n < hexdigits.size())
            result += hexdigits[n];
    }
    cout<< "Your hex number is :" << result <<endl;
}

PS:在测试的时候,输入完数据之后,Enter键进入到下一行,然后按组合键Ctrl+D。很巧妙,利用string做了一张表,10进制到16进制(以10进制为下标,其内容为10进制对应的16进制)

有一组成绩的集合,其中成绩的取值是从0到100.以10分为一个分数段,要求统计各个分数段到底有多少个成绩?

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    //11个分数段分别是:0、1、2...9、10字头的
    vector<unsigned> scores(11, 0);//总共11个分数段,存在动态数组scores里面
    unsigned grade;
    while (cin >> grade) {
        if (grade <= 100)
            ++scores[grade / 10];
    }
    //范围for语句
   for(auto score : scores)
   {
       cout<<score<<" ";
   }
   cout<<endl;

    /*
    //使用迭代器
    for (auto it = scores.begin(); it != scores.end(); ++it) {
        cout << *it << " ";
    }
     */
    return 0;
}

PS:不能用任何下标的形式来添加vector的元素。可以用于访问其中的元素。下标形式直接添加元素,有时候会越界的吧。

找出数组中第一个是负数的元素

#include <iostream>
#include <string>
#include <vector>
#include <iterator>
using namespace std;
int main()
{
    int arr[10] = {1,2,-3,4,-5,6,-7,8,9,5};
    int *pbeg = begin(arr),*pend = end(arr);
    while (pbeg != pend && *pbeg >= 0)
        ++pbeg;
    cout<<*pbeg<<endl;
}

PS: begin()和end(),分别返回指向arr首元素的地址和arr最后一个元素之后的地址。

用数组来初始化vector

#include <iostream>
#include <string>
#include <vector>
#include <iterator>
using namespace std;
int main()
{
    int arr[10] = {1,2,-3,4,-5,6,-7,8,9,5};
    vector<int >ivec(begin(arr), end(arr));
    for(auto figure : ivec)
        cout<< figure << " ";
    cout<<endl;
    vector<int> subVec(arr +1, arr +4);//不包括arr+4位置上的元素,右开
    for(auto figure : subVec)
        cout<< figure << " ";
    cout<<endl;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值