天天看點

C++Primer第五版 第三章習題答案(1~10)

第三章 3.1: 知識點:using聲明命名空間。注意的是頭檔案中不應該包含using聲明,因為在引用頭檔案時,會将頭檔案中的内容拷貝到檔案中來,如果頭檔案中包含了using聲明,那麼可能每一個頭檔案中都會包含using聲明,可能會造成名字的沖突。

常加:using namespace  std ;(将标準庫聲明)

3.2 知識點:讀入一整行和讀入一個詞主要的差别可以用getline()函數來實作。使用方法:getline(cin , stringname)

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

一次讀入一整行

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

一次讀入一個詞

3.3 對于string類的輸入函數,它會自動忽略開頭的空白(空格、制表符、換行等等),從第一個真正的字元開始直到下一個空白。

對于getline()函數,它會儲存字元串中的空白符,它讀入資料,直到遇到換行符位置。

3.4 對于字元串的比較:比較的是字元在字典中的順序 :b>a ,小寫字母大于大寫字母。

長度比較可以用size()函數。

字元串比較:

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

測試:

C++Primer第五版 第三章習題答案(1~10)

字元串長度比較:

#include <iostream>
#include <string>
using namespace std;
void 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;
	}	
}
           

測試結果:

C++Primer第五版 第三章習題答案(1~10)

3.5 連接配接字元串直接“+”即可。

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

分隔開來

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

我這裡投機取巧了~

3.6

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

注意這裡書上使用了C++11的新标準:範圍FOR語句,是不支援VS2010的,是以我隻能用這種比較笨的方法了。

3.7 這裡隻用char的話也是可以的,因為每一個元素都是char類型的。

3.8 我這裡就是用的傳統的for循環,感覺還不錯~

while的話也可以,但是我們已經知道循環的次數了,最好還是用for比較好。

3.9 不合法,因為字元串S是一個空字元串,第一個元素是未知的,引用非法。

3.10

#include <iostream>
#include <string>
using namespace std;
void main()
{	
	string mystring("cdsi4325#@ao");
	int num = mystring.size();
	for (int i=0 ; i<num ; i++)
	{
		 if (!ispunct(mystring[i])) 
			 cout << mystring[i];
	}
}
           

這裡主要使用到了自帶的函數: ispunct()判斷字元是否為标點符号~

繼續閱讀