程式設計之美一 字串

2021-07-03 04:56:07 字數 3989 閱讀 3811

字串是最常見的面試題目型別,應當分配最大的時間。

字串本身很簡單,但是相關的題目需要更複雜的演算法來解決。比如說動態規劃,搜尋,等等。

#include

strlen

求字串長度

strcmp

比較2個字串是否一樣

strcat

字串連線操作

strcpy

字串拷貝操作

strncat

字串連線操作(前n個字元)

strncpy

字串拷貝操作(前n個字元)

strchr

查詢子串

strstr

查詢字串

#include<

stdlib

.h>

atof

函式原型: double atof(char *str)

函式功能: 將字串轉換成乙個雙精度數值

atoi

函式原型: int atoi(char *str)

函式功能: 將字串轉換成乙個整數值

atol

函式原型: long atol(char *str)

函式功能: 將字串轉換成乙個長整數

itoa

函式原型:char*itoa(int value,char *string,int radix);

功能:將任意型別的數字轉換為

字串

int value 被轉換的

整數,char *string 轉換後儲存的

字元陣列

,int radix 轉換進製數,如2,8,10,16 進製等

memset

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

函式解釋:將s中前n個位元組 (typedef unsigned int size_t )用 ch 替換並返回 s 。

作用是在一段記憶體塊中填充某個給定的值,它是對較大的

結構體或

陣列進行清零操作的一種最快

//解決方案:可以建立乙個大小為256的雜湊表,統計每個字元出現的次數

char firstchar(char *pstring)

temp=pstring;

while(*pstring!='\0')

return '\0';

}

//在第二個字元中查詢,如果是刪除的字元直接在第乙個字元中刪掉

//查詢可以用雜湊表;

//刪除操作最好在o(n)時間內完成;

void deletechars(char *source,char *deletestr)

char *pslow = source;

char *pfast = source;

while(*pfast!='\0')

++pfast;

} *pslow='\0';

}

//刪除字串中重複出現的字元

//同上體思路一樣建立雜湊表,然後刪除重複字元

void deleteduplicatechars(char *str)

temp++;

}*delete='\0';

}

//把字串分兩部分

//第一部分為字串第乙個字元

//第二部分為除了第乙個字元外的剩下字元,接下來我們求剩下部分的排列

//拿第乙個字元和它後面的字元逐個交換

void permutation(char *str)

void permutation(char *str,char *begin)

}}

//寫乙個函式將字串轉換成整數;

//注意考慮空指標,空字串"",正負號,溢位等測試用例;

//並在寫**的時候將對這些特殊的輸入都定義好合理的輸出;

//可以設定乙個全域性變數,當輸入非法的時候修改全域性變數的值;

//最後如果返回值相同,通過檢查全域性變數的值來看輸入是否合法;

enum status

int strstatus=inputvaild;

int strtoint(const char *str)

if(*str!='\0')

}return (int)num;

}long long strtointcore(const char* digit,bool minus)

digit++;

} //輸出為0-9以外的字元;

else

}if(*digit=='\0')

return num;

}

//寫乙個函式,將整數轉換成字串

//整數轉換成字串可以通過加'0',再逆序的方法。

void inttostr(int n,char s)

while(n)

if(sign<0)

s[i++]='-';

s[i]='\0';

//將所得字串逆序;

for(j=i-1,k=0;j>=k;j--,k++)

}

//注意陣列從0開始計數;

//注意--和++的使用;

//測試時必須考慮特殊輸入!!!

//要求時間複雜度為o(n)

void exchangspace(char string,int length)

newlast = newlength ;

if(newlength==length)

return ;

length -= 1;

newlast -= 1;

//設定兩個指標分別指向新舊字串的末尾

while( length >= 0)

else if(string[length]==' ')

--newlast;

--length;

}}

//輸入乙個英文句子,翻轉句子中單詞的順序,單詞中字元的順序不變

//先翻轉句子中的所有字元再翻轉單個單詞

void reverse(char *begin,char *end)

}

//求兩個字串的第乙個最長子串

char *findfirstmaxsubstr(char *str1,char *str2)

} char *strreturn=(char*)malloc(sizeof(char)*(max+1));

for(i=0;i

//實現strstr函式;

//尋找子串在父串中首次出現的位置;

char *strstring(char *str,char *substr)

if(*tempsub=='\0')

return tempstr;

} return null;

}

//不開闢空間實現字串的反轉

void reverse(char *str)

{ if(str==null)

return;

for(int i=0,j=strlen(str)-1;i

其它簡單的面試題如求回文串,strcpy函式的實現等。

字串(一) 字串Hash

今天開一手最不 tao 擅 yan 長的字串演算法 字串hash演算法。似乎提到字串的話,kmp應該是更為常見的一種,但是hash有它的優點,被犇們稱為 優雅的暴力 何謂hash?hash的中文稱為雜湊,這當然是音譯,直譯過來就是雜湊,或者也有叫預對映的。雜湊的作用就是通過某個特殊函式的對映,將任意...

程式設計之美 2 17 字串迴圈移位

將字串向右迴圈移動 k 位 s abcd123 k 3 return 123abcd 將子串 s 0 str.length k 翻轉,子串s str.length k,str.length 翻轉。然後將整個字元翻轉可以到最終結果。eg 將 abcd123 中的 abcd 和 123 單獨翻轉,得到 ...

第一字串 Trie Topology

bessie最近在玩字串。她發現通過改變字母的順序可以使一些字串排在其他所有的字串之前 按字典序從小到大排序 比如說,bessie找到了對於字串 omm moo mom 和 ommnom 她可以用標準的字母表把 mom 排在最前面,也可以用字母表 abcdefghijklonmpqrstuvwxyz...