3/29
講師:吳崇維(wayne)
這邊介紹新的變數型態 char
一般的可見字元(0~9, a~z, +-*/)
都是字元的一種。
電腦使用一個位元組儲存字元
使得一個字元會對應到一個數字!
Ex : 'a' <=> 97
'b' <=> 98
'A' <=> 65
註:在一個變數前面加上(類別)
可以強制進行轉換!
--(類別)變數
用單引號指定一個字元
字元with整數運算
印出A - Z~
整數(int) + 陣列 =一般陣列
字元(char) + 陣列 =字串!
不多說,上圖
注意cin >> a的部分
程式需要知道a字串的頭的指標
並以此為出發點輸入。
強大的字串處理標頭檔!
string.h
在程式中引入string.h
便可以使用非常多字串函式
以下介紹最常用的:
strcpy
strcmp
strcat
strlen
函式原型:
void strcpy(char* s1, char* s2)
功能:輸入兩個字串
將s2的內容複製給s1
函式原型:
int strcmp(char* s1, char* s2)
功能:輸入兩個字串
如果兩個字元相等,回傳0
否則 ,回傳非0
函式原型:
void strcat(char* s1, char* s2)
功能:輸入兩個字串
把第2個字串接在第1個字串後面
Ex : s1 = "abcd"
s2 = "efg"
after -> s1 = "abcdefg"
函式原型:
int strlen(char* s1)
功能:輸入一個字串
回傳字串的長度
今天練習的code不要刪掉~~
會輸入很多字串,目的是把這些字串的長度設定成越來越長
其步驟如下~
輸入:一個正整數N代表接下來的字串總數
接下來N行各有一行字串
如果某一行字串短於上一個,則將他設定成上一個字串!
Problem 1.
1. 字串的陣列 ?
一個整數-> int x;
一個整數的陣列 -> int x[10];
一個字串-> int s[10];
一個字串的陣列 -> ?_?
2. 哪些前述函式可以被用到呢~
(應該2個很明顯的好用!)
HINT !
一連串的字串輸入中,可以請你判斷哪些"字母" 沒有出現過嗎?
輸入:一個正整數N代表接下來的字串總數
接下來N行各有一行字串
請輸出"未出現過的" 字母
Problem 2.
先前說過:字母與數字是一體兩面的~
更之前也練習過,一堆數字哪些沒有出現過(使用陣列)
試著結合兩者的特性!
HINT !
試著熟悉printf, scanf
在程式語言,輸出入通常是很花時間的
因為cin, cout 方便的特性,使得他們的速度比較慢。
printf, scanf 這種函數,雖然比較困難學習,格式很多,卻有很好的速度!
(不可以引入string.h,寫出4個function的模式)
以下示範:strlen, strcpy
#include <iostream>
using namespace std;
int strlen(char* s1) {
int len = 0;
for (int i = 0; s1[i] != '\0' ; i++) {
len++;
}
return len;
}
void strcpy(char* s1, char* s2) {
int l2 = strlen(s2);
for (int i = 0; i < l2; i++) {
s1[i] = s2[i];
}
s1[l2] = '\0';
return;
}
int main() {
char s1[10] = "str1";
char s2[10] = "2";
strcpy(s1, s2);
cout << s1 << '\n' << s2 << '\n';
}
之前提到區域變數的概念,那為什麼上面的形式會通呢?
因為字串傳遞變數的情報是指標,而指標對應到的變數都是同一個地方,也就是同一個字串
而字串的輸入,傳遞,原本就是指標的功勞!
一起努力快樂寫程式吧!