4.8

来源:互联网 发布:域名绑定邮箱服务器 编辑:程序博客网 时间:2024/05/16 10:13

/*
 *编写程序将一个list容器的所有元素复制给一个vector容器,
 *其中list容器中存储的是指向C风格字符串的char*指针,
 *而vector容器的元素则是string类型。
 */


#include <iostream>
#include <vector>
#include <list>
#include <string>

using namespace std;

int main()
{
 
 char *p[] = {"dewf","fgtrhy","xzcds",",kjjg"};

 list<char*> slist(p,p+4);
 

 

 vector<string> svec;

 svec.assign(slist.begin(),slist.end());

 for(vector<string>::iterator iter = svec.begin();iter != svec.end();++iter)
 {
  cout << *iter << endl;
 }
 

 system("pause");
 return 0;
}

 

 

 

 

 

 

 

 


//使用迭代器寻找和删除string对象中所有的大写字母
#include <iostream>
#include <vector>
#include <list>
#include <string>
#include <cctype>

using namespace std;

int main()
{
 vector<char> ivec;
 
 string str1("fhsiSEFrh"), str2;

 string::iterator first = str1.begin();

 while(first != str1.end())
 {
  if(isupper(*first) )
  {
   str1.erase (first);
   --first; //因为erase后,返回指向被删除元素后面的迭代器
  }
  ++first;
 }


 
 for(string::iterator iter = str1.begin();iter != str1.end();++iter)
 {
  cout << *iter << endl;
 }

 system("pause");
 return 0;
}

 

 

 

 


/*
 *已知string对象:line1,line2,line3;
 *编写程序计算sentence中有多少个单词,
 *并指出其中最长和最短的单词。
 *如果有多个最长或最短的单词,
 *则将它们全部输出。
 */
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
 vector<string> svec1, svec2;
 string line1 = "we were her pride of 10 she named us:";
 string line2 = "benjiamin, phoenix, the prodigal";
 string line3 = "and perspicacious pacific suzanne";
 string sentence = line1 + ' ' +line2 + ' ' + line3;

 cout << sentence << endl;

 string separators(" \t\n:,\v\r\f"); //分隔符

 int max_len = 0, min_len = 0, n= 0; 
 int  len = 0;
 string str1;


 string::size_type pos1 = 0, pos2 = 0;

 while((pos2 = sentence.find_first_of(separators,pos2)) != string::npos) //当pos2遇到分隔符进入循环
 {
  ++n;
  
  //当pos2第一次在分隔符上时对参数做的处理
  if(pos1 == 0)
  {
   len = pos2 - pos1;
   max_len = len;
   min_len = len;
   string str1(sentence,pos1,len);
   svec1.push_back(str1);
   svec2.push_back(str1);
   pos1 = pos2;
   ++pos2;
   
  }
  //对于最后一个单词所做的处理
  else if(pos2 == sentence.size()-1)
  {
   len = pos2 -pos1;
   string str1(sentence,pos1++,len);
   //如果单词长度最大且唯一做的处理
   if(len > max_len)
   {
    max_len = len;
    svec1.clear();
    svec1.push_back(str1);
   }
   //如果单词长度最大但不唯一做的处理
   else if(len == max_len)
    svec1.push_back(str1);
   //如果单词长度最小且唯一做的处理
   if(len < min_len)
   {
    min_len = len;
    svec2.clear();
    svec2.push_back(str1);
   }
   //如果单词长度最小但不唯一做的处理
   else if(len == min_len)
    svec2.push_back(str1);
   break;
  }
  //中间情况做的处理
  else
  {
   len = pos2 - pos1 - 1;
   //如果连续遇到两个符号做的处理
   if(len == 0)
   {
    --n;
    pos1 = pos2;
    
   }
   else
   {
    string str1(sentence,pos1+1,len);
    if(len > max_len)
    {
     max_len = len;
     svec1.clear();
     svec1.push_back(str1);
    }
    else if(len == max_len)
     svec1.push_back(str1);
    if(len < min_len)
    {
     min_len = len;
     svec2.clear();
     svec2.push_back(str1);
    }
    else if(len == min_len)
     svec2.push_back(str1);


   }

   pos1 = pos2;
   ++pos2;


   
  }
 }

 n++; //因为最后一个单词后面没有分割符号,所以本程序未将最后一个单词加进总数,这里进行自加操作。
 cout << n << endl;
 for(vector<string>::iterator iter = svec1.begin();iter != svec1.end();++iter)
 {
  cout <<  *iter << ' ';
 }
 cout << endl;


 for(vector<string>::iterator iter = svec2.begin();iter != svec2.end();++iter)
 {
  cout <<  *iter << ' ';
 }

 system("pause");
 return 0;
}

 

原创粉丝点击