By Sean Chiu, 2017 summer
用
單引號
' '
包住的一個字母/數字/符號,就是字元
像是
'A'
'a'
'0'
'@'
'!'
都是字元
char a;
char b='A';
char a;
cin>>a;
cout<<a;
十進位 | 代表字元 | 十進位 | 代表字元 |
---|---|---|---|
48 | 0 | 49 | 1 |
50 | 2 | 51 | 3 |
52 | 4 | 53 | 5 |
54 | 6 | 55 | 7 |
56 | 8 | 57 | 9 |
65 | A | 97 | a |
66 | B | 98 | b |
67 | C | 99 | c |
68 | D | 100 | d |
69 | E | 101 | e |
70 | F | 102 | f |
71 | G | 103 | g |
72 | H | 104 | h |
73 | I | 105 | i |
74 | J | 106 | j |
75 | K | 107 | k |
76 | L | 108 | l |
77 | M | 109 | m |
78 | N | 110 | n |
79 | O | 111 | o |
80 | P | 112 | p |
81 | Q | 113 | q |
82 | R | 114 | r |
83 | S | 115 | s |
84 | T | 116 | t |
85 | U | 117 | u |
86 | V | 118 | v |
87 | W | 119 | w |
88 | X | 120 | x |
89 | Y | 121 | y |
90 | Z | 122 | z |
我們甚至可以直接以數字取代字元(
97
取代
'a'
)
利用強制轉型,在
int
和
char
間互相轉換
將字元轉成對應整數:
(int)字元變數
將整數轉成對應字元:
(char)整數變數
char a='A';
int b=65;
cout<<(int)a<<" / ";
cout<<(char)b<<endl;
> 輸出:A / 65
讓使用者輸入一個介於33~126間的整數,印出相對應的字元
讓使用者輸入一個字元,印出相對應的整數
直接把兩個字元來相減,就可以得到距離
cout<<'b'-'a';
> 輸出:1
我們可以利用這個性質,將字元的數字轉成真正的數字
char c='7';
int a=c-0;
int b=c-'0';
cout<<"'7' - 0 = "<<a;
cout<<"'7' - '0' = "<<b;
> 輸出: '7' - 0 = 55
> '7' - '0' = 7
跳脫字元
指的是 脫離原字元的意思
利用跳脫字元可以達成跟原本字元不一樣的動作
字元 | 代表意義 | 字元 | 代表意義 |
---|---|---|---|
\n | 換行(與endl相同) | \t | Tab(多行對齊) |
\a | 嗶聲 | \\ | \ |
\’ | ’ | \" | " |
\0 | 空字元(沒東西) |
char a[10000];
輸入方面,可以用
cin
個別讀取字元或直接讀取整個字串
也可以用
scanf("%s",&陣列名稱)
(執行速度較快)
輸入整串字串時,
cin
和
scanf
會在最後一個字的下一格放一個
/0
若使用scanf,此時標頭要加上
#include<stdio.h>
#include<iostream>
#include<stdio.h>
using namespace std;
char a[100];
int main(){
scanf("%s",&a1)
}
輸出方面,以
cout
達成,
cout
會逐格輸出直到碰到
/0
為止
名字是由大小寫英文組成。
請依序輸出使用者輸入的字元直到不是大小寫英文為止。
#include<iostream>
using namespace std;
int main(){
char name[1000001];
int i=0;
while(1){
cin>>name[i];
char c=name[i];
if(c!='a'&&c!='b'&&c!='c'&&c!='d'&&c!='e'&&c!='f'&&c!='g'&&c!='h'&&c!='i'&&c!='j'&&c!='k'&&c!='l'&&c!='m'&&c!='n'&&c!='o'&&c!='p'&&c!='q'&&c!='r'&&c!='s'&&c!='t'&&c!='u'&&c!='v'&&c!='w'&&c!='x'&&c!='y'&&c!='z'&&c!='A'&&c!='B'&&c!='C'&&c!='D'&&c!='E'&&c!='F'&&c!='G'&&c!='H'&&c!='I'&&c!='J'&&c!='K'&&c!='L'&&c!='M'&&c!='N'&&c!='O'&&c!='P'&&c!='Q'&&c!='R'&&c!='S'&&c!='T'&&c!='U'&&c!='V'&&c!='W'&&c!='X'&&c!='Y'&&c!='Z')break;
i=i+1;
}
cout<<"Hello, ";
int j=0;
for(int j=0;j<i;j++){
cout<<name[j];
}
cout<<"!"<<endl;
return 0;
}
#include<iostream>
using namespace std;
int main(){
char name[1000001];
int i=0;
while(1){
cin>>name[i];
if(!((97<=name[i]&&name[i]<=122)||(65<=name[i]&&name[i]<=90)))
break;
i=i+1;
}
cout<<"Hello, ";
int j=0;
for(int j=0;j<i;j++){
cout<<name[j];
}
cout<<"!"<<endl;
return 0;
}
或是
#include<iostream>
using namespace std;
int main(){
char name[1000001];
int i=0;
while(1){
cin>>name[i];
if(!(('a'<=name[i]&&name[i]<='z')||('A'<=name[i]&&name[i]<='Z')))
break;
i=i+1;
}
cout<<"Hello, ";
int j=0;
for(int j=0;j<i;j++){
cout<<name[j];
}
cout<<"!"<<endl;
return 0;
}
讓使用者輸入一串字元,並以@結尾(不超過50個)
並輸出那些字元
也就是說,輸出到@字元時,結束輸出(不輸出@)。
input: Hi,APCS@gmail
output: Hi,APCS
簡單來說就是
上面提到的
儲存字元的陣列
用
雙引號
" "
包住的一串字母/數字/符號,就是字串
像是
"Hello, world!"
"APCS"
"2017/7/21"
"天氣晴"
都是字串
string a;
string b="hello, world";
string name;
cin>>string;
cout<<string;
因為 字串 就是 字元陣列,所以我們可以用陣列的語法來取得字串中任意位置的字
string a="apcs";
cout<<a[3]<<" "<<a[2]<<" "<<a[1]<<" "<<a[0];
執行結果:
s c p a
c++ 提供了函式,讓我們可以快速取得字串的長度
字串長度: 字串變數名稱.length()
string a="apcs";
cout<<a.length();
執行結果:
4
讓使用者輸入一個字串
然後倒序輸出
input: APCS
output: SCPA
試試看,如果輸入一個包含空白的字串,答案會變怎樣?
若大家用
cin
的方法輸入,當輸入空白字元時,電腦會判定輸入結束,所以空白後的字都不會被存進字串。
使用 cin 讀入字串時要特別注意空格的處理
這時我們可以用讀入整行的方法完成輸入。
讀入整行包含空白的字串:
getline(cin,字串變數)
string a;
getline(cin,a);
以下用法只適用於型態是
string
的變數
字串串接:
字串1=字串2+字串3
;
string a,b,c;
cin>>a>>b
c=a+b;
cout<<c;
取出 來源字串 某段給 存放字串:
存放字串.assign(來源字串,從哪個字元開始,取幾個字元)
string a,b;
cin>>a;
b.assign(a,1,3);
cout<<b;
> 輸入:apcs
> 輸出:pcs
取出 來源字串 某段加到 存放字串 後面:
存放字串.append(來源字串,從哪個字元開始,取幾個字元)
string a,b="@gmail.com";
cin>>a;
a.append(b,0,b.length());
cout<<a;
> 輸入:apcs
> 輸出:apcs@gmail.com
從字串x的第 n 格開始搜尋某字串y,回傳開頭位置:
x.find(y,n)
string a="@gmail.com";
cout<<a.find(".com",3);
> 輸出:6
從字串x的第 n 格開始 插入某字串y:
x.insert(n,y)
string a="@.com";
a.insert(1,"gmail");
cout<<a;
> 輸出:@gmail.com
以下用法只適用於型態是
char[]
的變數
以下請都要記得加入
#include<string.h>
才能使用
字串長度(從頭到不是
\0
的長度):
strlen(陣列)
;
char a[100];
cin>>a;
int len = strlen(a);
cout<<len;
>輸入:apcs
>輸出:4
字典順序:
strcmp(陣列1,陣列2)
若 陣列1比陣列2 字典順序較前,回傳
-1
若 陣列1和陣列2 相同,回傳
0
若 陣列1比陣列2 字典順序較後,回傳
1
char s1[100],s2[100];
cin>>s1>>s2;
if( strcmp( s1, s2 ) == -1 )
cout << "順序正確" << endl;
if( strcmp( s1, s2 ) == 0 )
cout << "兩字完全相同" << endl;
if( strcmp( s1, s2 ) == 1 )
cout << "順序相反" << endl;
>輸入:rock roll
> roll rock
> rock rock
>
>輸出:順序正確
> 順序相反
> 兩字完全相同