字串查詢函式
char *strchr(char
const *str, int ch);
char *strrchr(char
const *str, int ch);
strchr 在字串 str 中查詢字元 ch 第一次出現的位置,找到後函式返回乙個指向該位置的指標。如果該字元並不存在與字串中,函式就返回乙個 null 指標;strrchr 與 strchr 的區別是,它返回的是乙個指向字串中該字元最後一次出現的位置(最右邊的那個)
char *strpbrk(char
const *str, char
const *group);
函式返回乙個指向 str 中第乙個匹配 group 中任何乙個字元的字元位置,如果未找到匹配,函式返回乙個null指標
char *strstr(char
const *s1, char
const *s2);
函式在 s1 中查詢 s2 第一次出現的起始位置,並返回乙個指向該位置的指標。如果 s2 並沒有完整的出現在 s1 的任何地方,函式將返回乙個null指標
char *strtok(char *str, char
const *sep);
函式從字串中隔離各個單獨的稱為標記(token)的部分,並求其分隔符;sep 引數是個字串——定義了用作分隔符的字元集合,第乙個引數指定乙個字串,它包含零個或多個有 sep 字串中乙個或多個分隔符分割的標記。strtok 找到 str 的下乙個標記,並將其用 null 結尾,然後返回乙個指向這個標記的指標
**注意:**strtok 執行的時候,它將會修改它所處理的字串,如果源字串不能被修改,那就複製乙份,將這份拷貝傳遞給strtok 函式
如果 strtok 函式的第乙個引數不是 null,函式將找到字串的第乙個標記,同時儲存它在字串中的位置。如果第乙個引數是null,函式就在同乙個字串中從這個被儲存的位置開始像前面一樣查詢下乙個標記
字元分類
記憶體操作
void *memcpy(void *dest, const
void *src, size_t n);
注意:source 和 destin 所指的記憶體區域可能重疊,如果出現重疊,這個函式並不能確保 source 所在重疊區域在拷貝之前不被覆蓋,當出現任何形式的重疊,函式的結果是未定義的
strcpy 和 memcpy 的區別:
複製內容不同。strcpy 只能複製字串,而 memcpy 可以複製任意內容,例如字元陣列、整型等
複製方法不同。strcpy 不需要指定長度,他遇到被複製字元的串結束符 「\0」 才結束,所以容易溢位。而memcpy 則根據其第三個引數決定複製的長度
用途不同。複製字串用strcpy ,而需要複製其他型別的資料時則一般用memcpy
記憶體拷貝函式(防止記憶體重疊):memmove——能防止記憶體重疊問題,除此之外與 memcpy 一樣
#include
#include
#include
#include
//普通方法實現,只能識別計算空格、字母、字元型數字
int my_strlen(const
char *src)
src++;
}return count;
}//較為嚴謹的寫法,能識別計算特殊字元,並且:函式內不定義任何臨時變數
size_t my_strlen_new(const
char *str)
else
}int main()
#include
#include
char *my_strcpy(char *des, const char *src)
return p;
}char *my_strncpy(char *des, const char *src, int n)
return p;
}int main()
#include
#include
int my_strcmp(const
char *des, const
char *src)
if (*des > *src)
else
if (*des < *src)
else
return p;
}int my_strncmp(const
char *s1, const
char *s2, size_t n)
while (--n && (*s1 == *s2) && *s2)
return *(unsigned
char *)s1 - *(unsigned
char *)s2;
}int main()
#include
#include
#include
/*字串轉換為整型函式*/
int my_atoi(const
char *src)
if (*src == '-')
if (*src == '+')
src++;
while (isdigit(*src)) //isdigit 檢查其引數是否為十進位制數字字元
return flag * num;
}/*整型轉換為字串函式*/
char *my_itoa(char *des, int num)
for (int i = 0; i < count / 2; i++)
*des = '\0';
return p;
}int main()
#include
#include
/*字串連線函式*/
char *my_strcat(char *des, const char *src)
while (*src != '\0')
return p;
}int main()
#include
#include
/*求字串單詞個數*/
int wordnum(const
char *src)
if (*src != ' ' && flag == 0)
src++;
}return num;
}int main()
//------------- 字串的排序------------------
#include
#include
int main()
; int len = sizeof(country) / sizeof(country[0]);
for (int i = 0; i < len; i++)}}
for (int i = 0; i < len; i++)
return
0;}
#include
#include
#include
//當函式判斷沒有匹配到的時候返回null的情況
//1、用暴力實現
char *my_strstr1(char *str, char *sub)
else//如果在沒有匹配完成時出現不相等,則子串從頭開始,主串從上次位置的下一次開始
}if ((*str == '\0') && (*sub != '\0'))//這裡意味著如果主串指標走到末尾了,子串還沒走完,說明沒有匹配到
return temp_str;
}//2、用strncmp實現
// 相比於第一種方案,這種方案少了乙個對子串指標的移動,
// 將這個操作放到strncmp這個庫函式裡面去了
char *my_strstr2(char *str, char *sub)
else
}//此時沒有必要加if判斷語句,因為如果迴圈完while還沒有返回值,
//主串的指標肯定走到『\0』了,
temp_str = null;
return temp_str;
}//3、用strchr以及strncmp實現
char *my_strstr3(char *str, char *sub)
if (strncmp(strchr(str, ch), sub, len) == 0)
else
}char *temp = null;
return temp;
}int main()
#include
#include
#include
void * my_memmove(void *dst, const void *src, size_t count)
}else
}return ret;
}int main()
Angular初步學習總結
angular 寫 錯誤總結 ng new your project name 名稱以下劃線格式 在專案根目錄下建立元件 ng g c hero list ng generate component hero list 注意是以減號的格式建立元件 路由的書寫錯誤 path的value是字串且沒有 而...
軟體工程學習 初步總結
其實學完軟體工程已有幾天了,一直沒寫總結,一來是軟體工程中的一些作業還沒有做完,二來是對軟體工程的理解還不是很透徹。到目前為止,仍然對某些地方不太清楚。學習其實是乙個由表及裡的過程,學習軟體工程也是這樣。現在回過頭來看一下,發現只不過是從軟體工程的外在看了一下,對內部不是很清楚,或是說有些東西也是了...
git初步使用總結
一.安裝配置 windows篇 開啟bash,配置使用者名稱和郵箱.git config global user.name your name git config global user.email 可以通過 git config list來檢視引數.加上 global 表示已經進行全域性設定.右...