/*
OK, 回到字串主題, 字串也可以組成陣列, 當然可以用兩層有 NULL 的字元陣列來表示, 例如 :
char users[][5]={{'P','e','t','e','r','\0'},{'A','m','y','\0'},{'K','e','l','l','y','\0'}};
注意, 這裡第二維必須填上各字串中最長字元數 (不含 NULL), 第一維 (字串數) 則可不填, 編譯器會自動設定. 當然, 若第一維填入比最長字串還長的數也是可以的, 編譯器只讀到 NULL 便停止, 後面多出來的字元 (存的是無法預測的值) 其實是浪費的.
比較方便的賦值方式是直接用字串常數賦值 :
char users[][5]={"Peter","Amy","Kelly"};
Arduino 在 0019 版後加入了 String 型別 (其實是一種物件), 此函式庫提供許多字串函數使字串處理更方便, 參考 :
# https://www.arduino.cc/en/Reference/StringObject
也可以參考 C 語言的 string.h :
# C 語言標準函數庫分類導覽 - 字串處理 string.h
字串函數 說明
length() 傳回字串長度
indexOf(val), indexOf(val, from) 從左方搜尋子字串, 傳回首次出現位置索引
lastIndexOf(val), lastIndexOf(val, from) 從右方搜尋子字串, 傳回首次出現位置索引
substring(from), substring(from, to) 傳回子字串
replace(substr1, substr2) 將子字串 substr1 以子字串 substr2 取代
concat(str) 將 str 字串串接在後面
remove(index), remove(index, count) 刪除索引 index 到結尾之字元, 或刪除指定字元數 count
toLowerCase() 傳回轉成小寫後之字串
toUpperCase() 傳回轉成大寫後之字串
charAt(index) 傳回指定索引之字元
setCharAt(index, c) 將字串索引 index 之字元以指定字元 c 取代
equals(str) 是否與指定字串 str 雷同, 傳回 true/false
equalsIgnoreCase(str) 是否與指定字串 str 相同 (不分大小寫), 傳回 true/false
compareTo(str) 與 str 字串逐字比較 ASCII 字元, 雷同傳回 0, 在後傳回正值, 在前傳回負值
startsWith(str) 是否以指定字串 str 開頭, 傳回 true/false
endsWith(str) 是否以指定字串 str 結尾, 傳回 true/false
trim() 清除開頭與結尾的空白字元
toInt() 將以數字開頭直到非數字字元之字串轉成長整數傳回
toFloat() 將以數字開頭直到非浮點數字元之字串轉成浮點數傳回
reserve(bytes) 要求保留指定 bytes 數之記
例如 :
*/
void setup() {
Serial.begin(9600);
String str="Hello World!";
Serial.println(str.length()); //輸出 12
Serial.println(str.indexOf(" ")); //輸出 5 (有找到傳回索引)
Serial.println(str.indexOf(" ", 6)); //輸出 -1 (沒找到傳回 -1)
Serial.println(str.lastIndexOf("!")); //輸出 11
Serial.println(str.substring(6)); //輸出 World!
Serial.println(str.substring(0,7)); //輸出 Hello W
str.replace("World","Tony");
Serial.println(str); //輸出 Hello Tony!
str.concat(" Good Day!");
Serial.println(str); //輸出 Hello Tony! Good Day!
str.remove(16); //從 Day 前面空格開始刪
Serial.println(str); //輸出 Hello Tony! Good
str.remove(11,5); //從 G 前面空格開始刪
Serial.println(str); //輸出 Hello Tony!
str.toLowerCase();
Serial.println(str); //輸出 hello tony!
str.toUpperCase();
Serial.println(str); //輸出 HELLO TONY!
Serial.println(str.charAt(1)); //輸出 E
str.setCharAt(5,'+'); //將空格改為 +
Serial.println(str); //輸出 HELLO+TONY!
String str2="Hello+Tony!";
Serial.println(str.equals(str2)); //輸出 0
Serial.println(str.equalsIgnoreCase(str2)); //輸出 1
Serial.println(str.compareTo(str2)); //輸出 -32 (不同, str 在前)
Serial.println(str.compareTo("HELLO+TONY!")); //輸出 0 (雷同)
Serial.println(str.startsWith("HELLO")); //輸出 1
Serial.println(str.endsWith("TONY!")); //輸出 1
str=" HELLO ";
str.trim();
Serial.println(str.length()); //輸出 5 (已刪除前後空格)
str="180 Days";
Serial.println(str.toInt()); //輸出 180
str="65.245KG";
Serial.println(str.toFloat()); //輸出 65.25 (四捨五入到小數第二位)
}
void loop() {
}
/*
注意, 以上字串處理函式是 Arduino C 專用, 一般 C 語言沒有這些函式. 另外,
字串串接在 Arduino C 可以像 Python/Javacript 那樣用 + 直接串接,
在傳統 C 語言要用 strcat() 函式或指標, 不能用 +, 參考 :
# https://tw.gitbook.net/c_standard_library/c_function_strcat.html
# Arduino - 字串
*/
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3