C++ primer上习题 ,求更好的解决办法。
题目是这样描述的:
读入一段文本到vector对象,每个单词存储为vector中的一个元素。把vector对象中每个单词转化为大写字母。输出vector对象中转化后的元素,每八个单词为一行输出。
下面是我自己解决问题的代码。
#include<string>#include<vector>#include<iostream>using namespace std;string changecase(string word)//将小写字母转换成大写字母的函数{ if(word.size!=0) { for(string::size_type index=0;index!=word.size();index++) { word[index]-=32; } } return word;}void main(){ int count=0;//计数器 string temp; vector<string> ivec; while(cin>>temp) { if(temp=="endstop")//当输入的字符串为endstop时,退出 break; ivec.push_back(temp); } for(vector<string>::size_type ix=0;ix!=ivec.size();ix++) { ivec[ix]=changecase(ivec[ix]); cout<<ivec[ix]<<" "; count++; if(count==8) { cout<<endl; count=0; } }}#include<string>#include<vector>#include<iostream>using namespace std;string changecase(string word)//将小写字母转换成大写字母的函数{ if(word.size()!=0) /*size是个函数,要加括号才行*/ { for(string::size_type index=0;index!=word.size();index++) { if (word[index]>='a'&&word[index]<='z') /*只需要把小写字母转换掉就够了,别的不转*/ word[index]-=32; } } return word;}void main(){ int count=0;//计数器 string temp; vector<string> ivec; while(cin>>temp) { if(temp=="endstop")//当输入的字符串为endstop时,退出 break; ivec.push_back(temp); } for(vector<string>::size_type ix=0;ix!=ivec.size();ix++) { ivec[ix]=changecase(ivec[ix]); cout<<ivec[ix]<<" "; count=(count+1)%8; if(count==0) { cout<<endl; } }}
[解决办法]
word[index]-=32;
判断小写字母用islower()函数比较好
转换为大写字母用toupper()函数比较好
#include <cctype>