C C 基礎 筆試突擊 2 字串

2022-09-02 12:42:13 字數 1604 閱讀 7371

概述:

字串是由零個或多個字元組成的有限序列。

子串:串中任意個連續的字元組成的子串行。

字串是最常見和常考的一種型別,有很多演化的問題,例如最長公共子串行等,這裡就不介紹了,只了解一下相關的基本知識和標準庫的一些函式。

包含兩種:

1)字串常量:以雙引號括起來的字串行是字串常量。為了相容c語言,c++所有的字串常量都由編譯器自動在末尾新增乙個空字元。

例:字元常量'a'表示單個字元a,然後"a"是字串常量,其表示字母a和空字元(null)兩個字元。

2)末尾新增了'\0'的字元陣列。

c++語言通常用char*/const char*型別的指標來操縱c語言中的字串,一般來說,我們使用指標的算術操作來遍歷c風格字串,直到到達結束符null為止。

const

char *cp = "

hello world";

while(*cp)

注:最後的'\0'會轉化為十進位制的0,因此可以用while(*cp)來判斷。

舉個小例子,可以以此來求得字串的長度:

int len(char *x)

c/c++提供了眾多的字串處理函式,下表介紹了主要的一些函式:

strlen(s)

返回s的長度,不包括字串結束符null

strcmp(s1,  s2)

比較兩個字串s1和s2是否相同。若相等,返回0;若s1大於s2,返回正數;否則返回負數。

strcat(s1, s2)

將字串s2連線到s1後,返回s1

strcpy(s1, s2)

將s2複製給s1,並返回s1 

strncat(s1,s2,n)

將s2的前n個字元連線到s1後面,並返回s1

strncpy(s1,s2,n)

將s2的前n個字元複製給s1,並返回s1

再弄清楚兩個容易混淆的函式:

1)memcpy

void *memcpy(void *dest, const

void *src, size_t n);

2)memset

void *memset(void *s, int ch, size_t n);

功能:將s中前n個位元組用ch替換並返回s,作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作最快的一種方法。

下面寫乙個知識點:

strcpy和memcpy的區別:

1.複製的內容不同。strcpy只能複製字串,而memcpy可以複製任意內容,例如字元陣列、整型、結構體、類等。

2.複製的方法不同。strcpy不需要指定長度,遇到被複製字串的結束符'\0'才結束,所以容易溢位。memcpy則根據第三個引數來決定複製的長度。

3.用途不同。通常在複製字串的時候用strcpy,其他型別的時候用memcpy。

字串的基本知識就複習到這裡了,字串的實際應用時最廣泛的,這就要好好的研究演算法了,希望大家能記住這部分的知識~。~

返回目錄 -> c/c++基礎知識概述

Java基礎(2 字串)

public char charat int index 返回字串中第index個字元 public int length 返回字串的長度 public int indexof string str 返回字串中出現 str 的第乙個位置 public int indexof string str i...

2 字串查詢

kmp演算法 kmp演算法的關鍵是利用匹配失敗後的資訊,儘量減少模式串與主串的匹配次數以達到快速匹配的目的。具體實現就是實現乙個next 函式,函式本身包含了模式串的區域性匹配資訊。時間複雜度o m n 通過getnext 實現部分匹配值,然後利用kmp演算法計算是否匹配。如下 package li...

2 字串插入

描述 有兩個字串str和substr,str的字元個數不超過10,substr的字元個數為3。字元個數不包括字串結尾處的 0 將substr插入到str中ascii碼最大的那個字元後面,若有多個最大則只考慮第乙個。輸入 輸入包括若干行,每一行為一組測試資料,格式為 str substr 輸出 對於每...