第三章:字符串知识点、部分习题答案、以及学习心得感受

1、知识点:using声明命名空间。注意的是头文件中不应该包含using声明,因为在引用头文件时,会将头文件中的内容拷贝到文件中来,如果头文件中包含了using声明,那么可能每一个头文件中都会包含using声明,可能会造成名字的冲突。
常加:using namespace std ;(将标准库声明)

2、例题:编写一段程序从标准输入中一次读入一行,然后修改该程序使其一次读入一个词。
知识点:读入一整行和读入一个词主要的差别可以用getline()函数来实现。使用方法:getline(cin , stringname)
(a)一次读入一行的程序:

                            #include <iostream>
                            #include <string>
                           using namespace std;
							int main()
							{	
								string mystring;
								while (getline(cin , mystring))
								{
									cout<<mystring<<endl;
								}
							}

(b)一次读入一个词的程序:

							     #include <iostream>
							     #include <string>
							     using namespace std;
							     int main()
							     {	
								       string mystring;
								       while (cin>>mystring)
								         {
									              cout<<mystring<<endl;
								         }
							   }

3、例题:string类的输入运算符和getline的函数分别是如何处理空白字符的?
解析:(1)对于string类的输入函数,它会自动忽略开头的空白(空格、制表符、换行等等),从第一个真正的字符开始直到下一个空白。(2)对于getline()函数,它会保存字符串中的空白符,它读入数据,直到遇到换行符位置。

4、编写一段程序读入两个字符串,比较其是否相等并输出结果。如果不相等输出较大的那个字符串。改写上述程序,比较输入的两个字符串是否等长,输出长度较大的那个字符串。

知识点:对于字符串的比较程序:比较的是字符在字典中的顺序 :b>a ,小写字母大于大写字母。长度比较可以用size()函数。

													            #include <iostream>
													            #include <string>
												           	    using namespace std;
													            int main()
													            {	
														                string mystring1 , mystring2;
														                cin>>mystring1>>mystring2;
														                if (mystring1 != mystring2)
														                           {
															                              cout<<(mystring1 >= mystring2 ? mystring1 : mystring2)<<endl;
														                           }
													             }

知识点:字符串长度比较程序:

												         #include <iostream>
												         #include <string>
												         using namespace std;
												         int main()
												        {	
													                      string mystring1 , mystring2;
													                      cin>>mystring1>>mystring2;
													                      if (mystring1.size() != mystring2.size())
													                            {
														                            cout<<(mystring1.size() >= mystring2.size() ? mystring1 : mystring2)<<endl;
													                             }
													                      else
													                              {
														                                 cout<<"The length of these strings are the same!"<<endl;
													                              }	
												          }

知识点:编写一段程序从标准输入中读入多个字符并将他们连在一起,输出连接成的大字符串。然后修改上述程序,用空格把输入的多个字符串分隔开来。

连接字符串程序:连接字符串直接“+”即可。

													#include <iostream>
													#include <string>
													using namespace std;
													int main()
													{	
														string mystring;
														string sumstring;
														while (getline(cin ,mystring))
														   {
															      sumstring += mystring;
															      cout<<sumstring<<endl;
														   }
													}

分割开来的程序:

												#include <iostream>
												#include <string>
												using namespace std;
												int main()
												{	
													string mystring;
													string sumstring;
													while (getline(cin ,mystring))
													{
														sumstring = sumstring+mystring+" ";
														cout<<sumstring<<endl;
													}
												}

5、编写一段程序,使用范围for语句将字符串内的所有字符用X代替。

							#include <iostream>
							#include <string>
							using namespace std;
							int main()
							{	
								string mystring("jiangjialei");
								int num = mystring.size();
								for (int i=0 ; i<num ; i++)
								{
									mystring[i] = 'X';
								}
								cout<<mystring;	
							}

6、将5题中的循环控制变量的类型设为char将发生什么?写出程序:

								#include <iostream>
								#include <string>
								using namespace std;
								int main()
								{	
									   string mystring("jiangjialei");
									   int num = mystring.size();
									   for (char i=0 ; i<num ; i++)
									      {
										           mystring[i] = 'X';
									      }
									cout<<mystring;	
								}
							这里用char的话输出的结果也是正确的,因为每一个元素都是char类型的。

7、用while语句书写6题的程序;

									#include <iostream>
									#include <string>
									using namespace std;
									int main()
									{
										    int i = 0;
										    string mystring("jiangjialei");
										    int num = mystring.size();
										   while (i < num)
										      {
											             mystring[i] = 'X';
											             i++;
										     }
										cout << mystring;
									}
									分析:当我们已经知道循环的次数了,最好还是用for循环比较好。

8、下面程序有何作用?他合法吗?如果不合法为什么?
string s;
cout<<s[0]<<endl;
解析:不合法,因为字符串s是一个空字符串,第一个元素是未知的,引用非法。

9、编写一段程序,读入一个包含符号的字符串,将标点符号去除后输出字符串剩余部分。

									       #include <iostream>
									       #include <string>
									       using namespace std;
									       int main()
									           {
										                 string mystring("jjl1314wyh#@haha");
										                 int num = mystring.size();
										                 for (int i = 0; i < num; i++)
										                      {
											                             if (!ispunct(mystring[i]))
												                        cout << mystring[i];
										                      }
									          }
                                              解析:知识点为:主要使用到自带的函数:ispunct()判断字符是否为标点符号。

10、下面的范围for语句合法吗?如果合法,c的类型是什么?

const string s=“Keep out!”;
for(auto &c:s){/* …*/}
解析:for循环体不看后面花括号的内容,肯定是合法的,但是如果在for循环中花括号中给C赋值,修改C的值,那么此时的for语句肯定是不合法的。C的类型是const char& 。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N1314N

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值