上周,老師講了大整數的運算方法,我對大數的存儲和運算還有些不理解,仔細思考了一下,其實還是訓練孩子對機器存儲數據的各種掌握和運用吧。不多想,先期孩子雖然一直學習,但是缺乏對知識的系統整理,借著最近事情不太緊迫,幫著一起整理一下一些必要的東西。
在進行大整數運算的時候,老師提出了一種用字符串的每個字符存儲一個整數位的方法進行運算中,老師用到了cstring庫,提到了幾個相關的字符串操作函數,一并整理一下常用的幾個常用函數:
1.strcpy 字符串拷貝:char*strcpy(char* dest, constchar* src );
2.strncpy 字符串固定字符拷貝:char*strncpy(char* dest,constchar* src, size_t num );
3.strcat 字符串連接:char * strcat ( char * dest, const char * src);
4.strncat 字符串固定字符連接char * strncat ( char * dest, const char * src, size_t num );
5.strcmp 字符串比較:int strcmp ( const char * str1, const char * str2 );
6.strchr 字符串中字符查找:const char * strchr ( const char * str, int character );
7.strstr 字符串中字符串查找:const char * strstr ( const char * str1, const char * str2 );
8.strlen 字符串長度:size_t strlen ( const char * str );
9.memset 字符串初始化或者批量重置:void * memset ( void * ptr, int value, size_t num );
1.字符串復制
1.1.strcpy
strcpy的作用是復制整個字符數組到另一個字符數組,因此也就非常簡潔,只有兩個參數:
char
前一個是要復制到的目標數組起始位置,后一個是被復制的源數組起始位置。使用也非常簡單,下面就用一個例子來說明.
int
1.2. strncpy
strncpy與strcpy很類似,只是可以指定復制多少個字符。它的原型是:
char
顯前兩個參數的含義與strcpy相同,第三個參數num就是要復制的字符個數。需要注意的是因為是部分復制,所以該函數不會幫你添加’0’,要記得在調用完之后自己添加一個。
int
2.字符串連接
2.1. strcat
strcat的功能是把一個字符串連接到另一個字符串的后面。
char
前一個是目標字符串,后一個是要添加到后面的源字符串。
int
2.2. strncat
根據strcpy和strncpy之間的關系,應該猜到,該函數是可以指定字符個數進行連接。
char
3 字符串比較
3.1. strcmp
對兩個字符數組我們不能直接if (s > t)這樣比較,要這樣比較的是兩個字符數組的指針的地址。因此要用到strcmp函數。
int
兩個參數是要比較大小的字符數組,返回值是它們的大小關系。具體方式是:兩個字符串自左向右逐個字符相比(按ASCII值大小相比較),直到出現不同的字符或遇’0’為止。
如果str1和str2相等則返回0;
如果str1小于str2則返回小于零,如果str1大于str2,則返回大于零。
int
輸出結果:
Guess my favourite fruit? orange
Guess my favourite fruit? apple
Correct answer!
4 字符串查找
4.1 strchr
strchr函數可以在一個字符串里找某個字符第一次出現的位置。
const
前一個是原字符串,后一個是要查找的字符。
int
輸出:
Looking for the ‘s’ character in “This is a sample string”…
found at 4
found at 7
found at 11
found at 18
4.2 strstr
strstr函數可以在一個字符串里查找另一個字符串第一次出現的位置。
const
其中前一個是文本串,后一個是模式串。
int
輸出:
This is a sample string。
5.其他函數
5.1字符串長度
strlen用于求一個字符數組的長度,注意它是從給定的起始位置開始不斷往后嘗試,直到遇到’0’為止的,因此它的時間復雜度并不是常數級別的,而是取決于字符數組的長度,在字符數組沒有變動的情況下請務必不要重復調用。
size_t strlen ( const char * str );
那么參數毋庸置疑自然就是要求長度的字符數組了。
int
5.2 改變連續一段字符的值
memset是一個非常好用的函數,不僅在字符串方面。它可以把連續一段區間的內存修改成同一個值,以字節為單位。而一個字符正好就是一個字節,這也就讓memset可以很好的為字符串的區間修改提供服務。
void
ptr指向要修改的內存塊的起始地址,value是要修改成什么值,num是修改多少個。
int