设为首页 加入收藏

TOP

8.11.2 连接字符串(2)
2013-10-07 16:09:49 来源: 作者: 【 】 浏览:75
Tags:8.11.2 连接 字符串

8.11.2  连接字符串(2)

ages通常是一个整数数组,但这里把它当成是一个字符串数组,只是为了更多地使用字符串。这个示例产生类似下面的输出:

  1. Enter a first name or press Enter to end: Marilyn  
  2. Enter a second name: Munroe  
  3. Enter Marilyn's age: 26  
  4. Enter a first name or press Enter to end: Tom  
  5. Enter a second name: Crews  
  6. Enter Tom's age: 45  
  7. Enter a first name or press Enter to end: Arnold  
  8. Enter a second name: Weisseneggar  
  9. Enter Arnold's age: 52  
  10. Enter a first name or press Enter to end:  
  11. The names you entered are:  
  12. Marilyn Munroe aged 26.  
  13. Tom Crews aged 45.  
  14. Arnold Weisseneggar aged 52.  
  15. Done!!  

示例说明

listnames函数列出存储在数组中的姓名和年龄(它们作为前两个实参传递)。第三个实参是数组中元素的个数。数据的清单出现在一个循环中:

  1. for(size_t i = 0 ; i < count && !names[i].empty() ; ++i)  
  2. cout << names[i] + " aged " + ages[i] + '.' << endl;  

循环条件是双重保险(belt and brace)控制机制,它不仅检查索引i是否小于作为第三个实参传递的count的值,而且还调用当前元素的empty()函数来确认它不是空字符串。循环体中的那个语句用+运算符连接names[i]中的当前字符串与字面值"aged"、ages[i]字符串及字符'.',并将产生的字符串写到cout中。这个连接字符串的表达式等价于:

  1. ((names[i].operator+(" aged ")).operator+(ages[i])).operator+('.') 

每次调用operator+()函数都会返回一个新的string对象。所以此表达式演示了将一个string对象与一个字符串字面值合并,将一个string对象与另一个string对象合并,以及将一个string对象与一个字符字面值合并。

虽然上面的代码演示说明了string::operator+()函数的用法,但出于性能考虑使用下面的语句:

  1. cout << names[i] << " aged " << ages[i] << '.' << endl

这避免了调用运算符函数和由此而导致的创建所有字符串对象。

在main()中,首先用下面的语句创建两个string对象的数组,长度为count:

  1. const size_t count = 100;  
  2. string names[count];  
  3. string ages[count];  

names和ages数组将存储从键盘上输入的姓名和相应的年龄值。

在main()的for循环内,分别用getline()函数模板来读取姓和名:

  1. cout << endl << "Enter a first name or press Enter to end: ";  
  2. getline(cin, firstname, '\n');  
  3. if(firstname.empty())  
  4. {  
  5. listnames(names, ages, i);  
  6. cout << "Done!!" << endl;  
  7. return 0;  
  8. }  
  9. cout << "Enter a second name: ";  
  10. getline(cin, secondname, '\n');  

getline()函数允许读空字符串,而使用cin的>>运算符不能读空字符串。getline()的第一个实参是作为输入源的流,第二个实参是输入的目的地,第三个实参是标志输入操作结束的字符。如果省略第三个实参,输入'\n'将终止输入过程,因此这里可以省略第三个实参。使用读空字符串的能力来测试firstname中的空字符串(通过调用它的empty()函数)。由于空字符串是输入结束的信号,因此调用listnames()来输出数据,并结束程序的执行。

当firstname不为空时,继续用getline()模板函数将姓读入secondname中。使用+运算符连接firstname和secondname,并将结果存储在names[i]中,它是names数组中当前未使用的元素。

在循环中最后读入年龄字符串,并将结果存储在ages[i]中。for循环将条目数限制为count,它对应于数组中的元素个数。如果没能成功地结束循环,数组在显示一条消息(表明已经输出了所输入的数据)后就满了。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇8.11.2 连接字符串(1) 下一篇8.11.3 访问与修改字符串(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)