標籤:iostream 預設值 lib 類型轉換 pac upper rto 原始碼 轉換
文本字串儲存:每個字元加上一個‘\0‘的ascii碼。所以一個文本字串也就是一連串位元組,每個位元組是0~255的一個數值。鍵盤輸入或螢幕輸出時,會發生數值跟字元之間的轉換。(國際標準unicode編碼使用了一個以上的位元組 來表示每個字元。)
由於原始碼儲存在文字檔裡,而文本字元是以數值形式儲存的。因此電腦來處理原始碼時,處理的其實就是這些連串的數值,按照另一套精確的規則進行另一種形式的數值運算、資料求值和決策判斷。(!!!最開始的第一版編譯器只能用機器碼來編寫!!!而老編譯器又可以用來編寫新編譯器,就這樣波浪發展,複雜的編譯器當然不用機器碼編寫啦!)
字串實際是基底類型為char(一位元組寬的整形)的數組。
char str[20] = "how long?"; //未初始化的成員,是否全域情況就是0,局部情況就是垃圾?
字串以‘\0‘(即數值0)為結尾。
char s[] = "const"; //未指定長度,會被分配8個位元組空間(包括容納‘\0‘),s是常量 //it:指定長度不足會截斷?
char* s = "variable"; //s是變數,可以被重新賦值指向別處。it:所以可以分聲明const char* s;這樣s就不可變了。
字串處理函數:
strcpy(s1,s2) //s2複製到s1
strcat(s1,s2) //s2追加到s1
strncpy(s1,s2,n) //最多複製n個,不包括‘\0‘ //s2是常量字串並且裡頭有‘\0‘,會怎麼樣?
strncat(s1,s2,n) //最多追加n個,不包括‘\0‘。追加起點是s1中第一個‘\0‘所在位置
strlen(s) //s的長度,不包括‘\0‘
strtok(src_str,delims) // 用字元delims分割src_str,返回第一個子串的指標
strtok(NULL, delims) //返回已知源串(strtok上次調用所指定的src_str)裡的下一個子串的指標。沒有子串可返回就將返回NULL
c++不會為了能儲存整個字串做任何事,這得碼農保證。
char s[80]; //指定了長度但沒初始化,c++還是為它保留了80個位元組
當代碼中出現常量字串,c++會為之分配空間並返回其地址,即字串被求值為一個地址。
#include <iostream>
#include <cstring> //strcpy等函數在這裡頭
#define STR_LEN = 100;
using namespace std;
char* str[STR_LEN];
cin.getline(str, STR_LEN-1); //讀入一行(讀到‘\n‘即結束),最多讀入STR_LEN-1個字元。(it)應該不會自動補上‘\0‘
逸出字元‘\b‘是退格
輸入資料流操作符(>>)會進行自動類型轉換
cin.getline表明getline是cin這個對象的一個成員函數。對象是其成員函數的作用對象。
cin>>val; //擷取第一個空白符(空格 定位字元 分行符號)之前的資料,(it)嘗試轉化為var類型資料賦給var。空白符之後的資料還留在輸入資料流裡等待下一個輸入操作把它取走。如果直接輸入空白符,cin會一直等待輸入。較好的方法是設定預設值並提示輸入者。
cin.getline之後再用cin>>經常會出問題,原因是二者對待分行符號的做法不同。因此在同一個程式裡最好只用一種。
#include <cstdlib> //有atof atoi等函數
#include <cctype> //有toupper tolower等函數
C字串: c及c++裡以‘\0‘為結束標誌的字串(char*類型)
類似Basic,C++較新版本裡提供了string類型(其實是STL提供的一個類,只有很老的C++版本才不支援STL),從而不用再考慮字串長度這種繁瑣易錯的東西。#include <string>可啟用此支援。(注意啟用C字串的是<cstring>,strcpy等老函數需要它) 類似於cin和cout,可以選擇using namespace std,否則就要std::string這樣使用這個類。 it:<string>屬於c++標準庫而不屬於c標準庫。另外,c的標準庫(例如<ctype.h>)在c++中另有實現(例如<cctype>)
string a, b, c; //聲明
string a("so"),b("easy"); //初始化
a = "so"; b = "easy"; //初始化
string a = "so"; //聲明加初始化
a可以重新複製而不用擔心容納不了:
a = "fking beauty is nature.";
可以進行比較:
int ret = (a == b);
《好學的C++ 第2版》 第5章 字串--分析文本