以下介紹一些常用的文字處理函式
適當使用就能處理各式各樣的文字了!
http://www.cplusplus.com/reference/istream/istream/get/
回傳 char
和 cin >> c
不同在,可以讀取 空白字元(' '
)、換行字元('\n'
)
goodbye & hello
得到字元[g] ASCII編號 [103]
得到字元[o] ASCII編號 [111]
得到字元[o] ASCII編號 [111]
得到字元[d] ASCII編號 [100]
得到字元[b] ASCII編號 [98]
得到字元[y] ASCII編號 [121]
得到字元[e] ASCII編號 [101]
得到字元[ ] ASCII編號 [32]
得到字元[&] ASCII編號 [38]
得到字元[ ] ASCII編號 [32]
得到字元[h] ASCII編號 [104]
得到字元[e] ASCII編號 [101]
得到字元[l] ASCII編號 [108]
得到字元[l] ASCII編號 [108]
得到字元[o] ASCII編號 [111]
得到字元[
] ASCII編號 [10]
#include<iostream>
using namespace std;
int main()
{
char c;
while(true)
{
c = cin.get();
cout << "得到字元[" << c << "] ASCII編號 [" << (int)c << "]" << endl;
}
return 0;
}
http://www.cplusplus.com/reference/istream/istream/peek/
peek:偷看、窺視
回傳 char
會偷看到 空白字元(' '
)、換行字元('\n'
)
392670
c++
即將要輸入數字開頭的東西
輸入了:392670
即將要輸入小寫字母開頭的東西
輸入了:c++
#include<iostream>
using namespace std;
int main()
{
string s;
char c;
while(true)
{
c = cin.peek();
if( '0' <= c and c <= '9' )
cout << "即將要輸入數字開頭的東西" << endl;
if( 'a' <= c and c <= 'z' )
cout << "即將要輸入小寫字母開頭的東西" << endl;
cin >> s;
cin.get(); //先讀掉 換行字元'\n' 避免下次偷看到
cout << "輸入了:" << s << endl;
}
return 0;
}
http://www.cplusplus.com/reference/istream/istream/getline/
可以一次讀取完整的一行( 包括空白字元 )
cin.getline( 字元陣列, 最多字元數 )
函式會將輸入結果存在字元陣列裡
Let it go! Let it go!
Can't hold it back anymore
得到: Let it go! Let it go!
得到: Can't hold it back anymore
#include<iostream>
using namespace std;
int main()
{
char s[105];
while(true)
{
cin.getline( s, 100 );
cout << "得到: " << s << endl;
}
return 0;
}
Q11541: Decoding http://luckycat.kshs.kh.edu.tw/homework/q11541.htm
Q11577: Letter Frequency http://luckycat.kshs.kh.edu.tw/homework/q11577.htm
http://www.cplusplus.com/reference/cstring/
以下函式都必須先加入 #include<string.h>
才能使用
皆只適用於 char陣列
http://www.cplusplus.com/reference/cstring/strlen/
strlen(字串)
回傳 int 代表陣列長度
是不包括 結束字元'\0'
的長度
經常搭配 for迴圈 使用,走遍陣列裡所有字元
moe
esperanto
moe長度為3
第0個字元:m
第1個字元:o
第2個字元:e
esperanto長度為9
第0個字元:e
第1個字元:s
第2個字元:p
第3個字元:e
第4個字元:r
第5個字元:a
第6個字元:n
第7個字元:t
第8個字元:o
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char s[100];
int len, i;
while( cin >> s )
{
len = strlen(s);
cout << s << "長度為" << len << endl;
for( i=0 ; i<len ; i++ )
cout << "第" << i << "個字元:" << s[i] << endl;
}
return 0;
}
http://www.cplusplus.com/reference/cstring/strcmp/
strcmp(字串1, 字串2)
回傳 int 代表 比較結果
若 字串1比字串2 字典順序較前,回傳 -1
若 字串1和字串2 相同,回傳 0
若 字串1比字串2 字典順序較後,回傳 1
常用來看兩個字串相不相同
rock roll
roll rock
rock rock
順序正確
順序相反
兩字完全相同
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char s1[100], s2[100];
int result;
while( cin >> s1 >> s2 )
{
result = strcmp( s1, s2 );
if( result == -1 )
cout << "順序正確" << endl;
if( result == 0 )
cout << "兩字完全相同" << endl;
if( result == 1 )
cout << "順序相反" << endl;
}
return 0;
}