设法将vector对象中的所以词都改写成大写形式

今天在学C++容器中的vector,书后面有个练习题:

从cin读入一组词并把它们存入一个vector对象,然后设法把所有词都改写成大写的形式。输出改变后的结果,每个词占一行。

然后我的第一想法是这样的:

#include<iostream>
#include<string>
#include<ctype.h>
#include<vector>

using namespace std;

int main(void)
{
  string word;
  vector<string> str;
  int i=0;
  while(cin>>word)
     str.push_back(word);
  for(decltype(str.size()) index = 0;index != str.size();++index)
     {
	 str[index] = toupper(str[index]);
     }
 cout<<str<<endl;
  return 0;
}
当然这个程序错误百出,是个错误的示范,上面的程序学string对象时是可以实现的,但是vector不同于string,是不可能用同一种方法实现的。

错误一:这样用for循环遍历vector对象

错误二:就算上面的for循环遍历成功,用toupper把一整个string对象转为大写也是不可行的,toupper一次只能转换一个字符

错误三:直接用cin简单粗暴的输出vector对象

正确演示(来自与C++ Prime习题解答):

#include<iostream>
#include<string>
#include<ctype.h>
#include<vector>

using namespace std;

int main(void)
{
  string str;
  vector<string> vec;
  char cont = 'y';
  
  cout<<"请输入第一个词:"<<endl;

  while(cin>>str)
  {
     vec.push_back(str);
     cout<<"你要继续吗?(y or n)"<<endl;
     cin>>cont;
     if(cont != 'y'&& cont != 'Y')
        break;
      cout<<"请输入下一个词:"<<endl;
  } 

 cout<<"转换后的结果是:"<<endl;
 for(auto &mem:vec)  //使用范围for循环语句遍历vec中的每个元素
  {
     for(auto &c : mem) //使用范围for循环语句遍历mem中的每个字符
         c = toupper(c); //改写为大写字母形式
     cout<<mem<<endl;
  }
  return 0;
}
下面是程序允许演示:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值