奧林匹亞資訊班

3/29

講師:吳崇維(wayne)

作業檢討!

字元 / 字串

字元 (char)

 

這邊介紹新的變數型態 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

 

1. strcpy

函式原型:

void strcpy(char* s1, char* s2)

 

功能:輸入兩個字串

將s2的內容複製給s1

2. strcmp

函式原型:

int strcmp(char* s1, char* s2)

 

功能:輸入兩個字串

如果兩個字元相等,回傳0

否則                       ,回傳非0

3. strcat

函式原型:

void strcat(char* s1, char* s2)

 

功能:輸入兩個字串

把第2個字串接在第1個字串後面

 

Ex : s1 = "abcd"

       s2 = "efg"

after -> s1 = "abcdefg"

4. strlen

函式原型:

int strlen(char* s1)

 

功能:輸入一個字串

           回傳字串的長度

 

字串 x 函式

今天練習的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 這種函數,雖然比較困難學習,格式很多,卻有很好的速度

作業!

  • 將今天的練習都換成 printf, scanf輸入輸出
  • 善用google ! 在搜尋解答的過程中學習
  • 慢慢讓自己習慣 printf, scanf 
  • 請你實作上課提到4個string function !

(不可以引入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';
}

Question: 

之前提到區域變數的概念,那為什麼上面的形式會通呢?

Answer:

因為字串傳遞變數的情報是指標,而指標對應到的變數都是同一個地方,也就是同一個字串

而字串的輸入,傳遞,原本就是指標的功勞!

FeedBack!

一起努力快樂寫程式吧!

Made with Slides.com