第三章 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;
}
}
測試:
字元串長度比較:
#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;
}
}
測試結果:
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()判斷字元是否為标點符号~