设为首页 加入收藏

TOP

8.11.4 比较字符串(2)
2013-10-07 16:09:36 来源: 作者: 【 】 浏览:72
Tags:8.11.4 比较 字符串

8.11.4  比较字符串(2)

下面是该示例的一些典型输出:

  1. Enter a word or press Enter to end: loquacious  
  2. Enter a word or press Enter to end: transmogrify   
  3. Enter a word or press Enter to end: abstemious  
  4. Enter a word or press Enter to end: facetious  
  5. Enter a word or press Enter to end: xylophone  
  6. Enter a word or press Enter to end: megaphone  
  7. Enter a word or press Enter to end: chauvinist  
  8. Enter a word or press Enter to end:  
  9. In ascending sequence, the words you entered are:  
  10. abstemious chauvinist facetious loquacious megaphone  
  11. transmogrify xylophone  

示例说明

sort()函数最有趣的部分是它接受两个实参:字符串数组的地址与数组元素的个数。该函数使用冒泡排序法,方法是按顺序扫描元素并逐个比较它们。所有工作都在while循环中完成:

  1. bool swapped(false);  
  2. while(true)  
  3. {  
  4. for(size_t i = 0 ; i < count-1 ; i++)  
  5. {  
  6. if(strings[i] > strings[i+1])  
  7. {  
  8. swapped = true;  
  9. strings[i].swap(strings[i+1]);  
  10. }  
  11. }  
  12. if(!swapped)  
  13. break;  
  14. swapped = false;  
  15. }  

上述代码中用>运算符比较strings数组中的逐个元素。如果一对元素中第一个元素大于第二个元素,就交换这两个元素。在这种情况下,通过调用一个string对象的swap()函数,并将另一个string对象作为实参来交换元素。根据需要继续逐个比较整个数组的元素,并进行交换。这一过程一直重复到处理完所有元素,且没有元素需要交换时为止。然后,元素就变成了升序排列。bool变量swapped充当指示器,表明在给定的比较过程中有没有发生交换。仅当交换两个元素时,才会将它设置为true。

main()函数最多能在一个循环中向字符串数组中读入100个单词:
 

  1. while(nstrings < maxstrings)  
  2. {  
  3. cout << "Enter a word or press Enter to end: ";  
  4. getline(cin, strings[nstrings]);  
  5. if(maxwidth < strings[nstrings].length())  
  6. maxwidth = strings[nstrings].length();  
  7. if(strings[nstrings].empty())  
  8. break;  
  9. ++nstrings;  
  10. }  

这里getline()函数从cin中读取字符,直至读到'\n'。输入存储在第二个实参strings[nstrings]指定的string对象中。只需按下Enter键就会导致一个empty()字符串,因此当读取的最后一个string对象的empty()函数返回true时终止循环。maxwidth变量用来记录输入的最长字符串的长度。在对输入内容进行排序以后的输出过程中会用到它。

调用sort()函数可以按升序对strings数组中的内容进行排序。结果是在一个循环中输出:
 

  1. cout << endl 
  2. << "In ascending sequence, the words you entered are:"  
  3. << endl 
  4. << setiosflags(ios::left);                                      // Left-justify the output  
  5. for(size_t i = 0 ; i < nstrings ; i++)  
  6. {  
  7. if(i % 5 == 0)  
  8. cout << endl;  
  9. cout << setw(maxwidth+2) << strings[i];  
  10. }  

这段代码在宽度为maxwidth+2个字符的字段中输出各个元素。因为调用了setiosflags()操作符,实参为ios::left,所以字段中的各个单词保持左对齐。与setw()操作符不同,在重置之前setiosflags()操作符仍然有效。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇8.11.4 比较字符串(1) 下一篇8.11.5 搜索字符串(1)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·python数据分析岗的 (2025-12-25 10:02:21)
·python做数据分析需 (2025-12-25 10:02:19)
·成为一个优秀的pytho (2025-12-25 10:02:16)
·Java后端面试实习自 (2025-12-25 09:24:21)
·Java LTS版本有哪些 (2025-12-25 09:24:18)