將跳轉至一大牛的博客,對我啓發很大#鏈接#
其中關於getline()敘述不是很詳細,另作補充:
要在前面加上頭文件 #include < string>
string類常用的構造函數:
string();//默認構造函數,建立一個長度爲0的字符串
例子:string s1;
string (const char *s);//用指針s所指向的字符串常量初始化string對象
例:
string s2 = “abc” ;
string(const string & rhs); //複製構造函數
例:
string s3= s2;
string類常用操作:
s +t 將串s和t連接成一個新串
s = t 用t更新s
s == t 判斷s與t是否相等
s != t 判斷s和t是否不等
s < t 判斷s是否小於t(字典順序)
s >= t
s[i] 訪問串中下標爲i的字符
s.length 得到字符串的長度
getline 輸入整行字符串
例子:
getline(cin, s2);
輸入字符串的時候,可以使用其他分隔符作爲字符串結束的標誌(例如逗號,分號),將分隔符作爲getline的第三個參數即可:
例子:
getline(cin,s2,’,’);
此寫法將讀到‘,’處停止讀入。
用了string 來操作可以使很多看似很難的問題簡單化
比如來個實戰:
統計單詞數
題目描述
一般的文本編輯器都有查找單詞的功能,該功能可以快速定位特定單詞在文章中的位置,有的還能統計出特定單詞在文章中出現的次數。
現在,請你編程實現這一功能,具體要求是:給定一個單詞,請你輸出它在給定的文章中出現的次數和第一次出現的位置。注意:匹配單詞時,不區分大小寫,但要求完全匹配,即給定單詞必須與文章
中的某一獨立單詞在不區分大小寫的情況下完全相同(參見樣例1 ),如果給定單詞僅是文章中某一單詞的一部分則不算匹配(參見樣例2 )。
輸入輸出格式
輸入格式:
共2行。
第1行爲一個字符串,其中只含字母,表示給定單詞;
第2行爲一個字符串,其中只可能包含字母和空格,表示給定的文章。
輸出格式:
一行,如果在文章中找到給定單詞則輸出兩個整數,兩個整數之間用一個空格隔開,分別是單詞在文章中出現的次數和第一次出現的位置(即在文章中第一次出現時,單詞首字母在文章中的位置,位置從0 開始);如果單詞在文章中沒有出現,則直接輸出一個整數-1。
input example
To
to be or not to be is a question
to
Did the Ottoman Empire lose its power at that time
output example
2 0
-1
c++代碼
#include <bits/stdc++.h>//萬能頭文件
using namespace std;
int main()
{
string a,b;
int i,j,a1,b1,n=0;
string::size_type s,h;//string中find()的使用具體看上面鏈接
getline(cin,a);
getline(cin,b);
a1=a.size(),b1=b.size();
for(i=0;i<a1;i++)
a[i]=tolower(a[i]);
for(j=0;j<b1;j++)
b[j]=tolower(b[j]);
a=' '+a+' ';
b=' '+b+' ';//可以說是點睛之筆了
s=b.find(a);
if(s==string::npos)
cout<<"-1";
else
{
h=b.find(a);
while(h!=string::npos)
{
n++;
h=b.find(a,a1+h);
}
cout<<n<<" "<<s;
}
}