c语言字符串文库总结,C语言字符串.ppt
C語言字符串.ppt
ACM程序設計,福州大學至誠學院 馮新,第四講,字符串處理,常用函數介紹,復制,char* strcpy char *s1, const char *s2; 將字符串s2復制到s1指定的地址 char* strncpy char *s1, const char *s2, size_t len; 將s2的前len個字符字節復制到s1中指定的地址, 不加0,連接,char* strcat char *s1, const char *s2; 將字符串s2連接到s1尾部 char* strncat char *s1, const char *s2, size_t len; 將字符串s2的前len個字符連接到s1尾部, 不加0,比較,int strcmp const char *s1, const char *s2; 比較字符串s1和s2 int strncmp const char *s1, const char *s2, size_t len; 對s1和s2的前len個字符字節作比較,查找,char* strchr const char *s, int ch; 在s中查找給定字符字節值ch第一次出現的位置 char* strrchr const char *s, int ch; 在串s中查找給定字符ch最后一次出現的位置, r表示從串尾開始 char* strstr const char *s1, const char *s2; 在串s1中查找指定字符串s2第一次出現的位置,其他,size_t strlen const char *s; 求字符串s的長度,字符轉換,所謂字符轉換就是將字符按照某種規律轉換成對應的字符,曾經最難的問題(HDU 1048),題目描述 愷撒大帝生活在充滿危險和陰謀的時代。愷撤大帝面臨最嚴峻的形勢就是如何生存下去,為了生存,他決定設計一種密碼。這種密碼設計得是如此難以置信的合理,以至于不知道它的原理就無法破譯。 你是愷撒軍隊的一個小隊長。你的工作就是對愷撒發布的密文進行解碼,然后告訴軍頭的司令官。加密的規則其實很簡單對原文中的每個字母,轉換成字母表后面第5個字母,如原文中的字符為字母A,則密文中對應的字符為F。因為你的工作是解碼,所以要將密文文翻譯成原文。 ciphertext密文ABCDEFGHIJKLMNOPQRSTUVWXYZ plaintext 原文VWXYZABCDEFGHIJKLMNOPQRSTU 加密時,只有字母字符才按照上述規則進行加密。任何非字母字符保持不變,而且所有享母字符均為大寫字母。輸入數據 輸入文件(非空)最多包含100組數據。每組數據為下面的格式,每組數據之間沒有空行,所有的字符為大寫。 每組數據由3行組成 1首行為字符串START; 2第2行為密文,包含的字符個數大于等于1,小于等于200,表示愷撒發布的密文; 3第3行為字符串END。 最后一組數據后有ENDOF,表示輸入結束。 輸出描述 對每組數據,輸出一行,為你解密出來的原文。,輸入數據 輸入文件(非空)最多包含100組數據。每組數據為下面的格式,每組數據之間沒有空行,所有的字符為大寫。 每組數據由3行組成 1首行為字符串START; 2第2行為密文,包含的字符個數大于等于1,小于等于200,表示愷撒發布的密文; 3第3行為字符串END。 最后一組數據后有ENDOF,表示輸入結束。 輸出描述 對每組數據,輸出一行,為你解密出來的原文。 Sample START NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX END START IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ END ENDOF Sample Output IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES DANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THAN HE題目分析,分析本題針對的大寫字母,把每個字母轉換成字母表前5個字母,形成環狀序列。F轉換成AG轉換成BZ轉換成U,A、B、C、D、E分別轉換成V、W、X、Y、Z。 轉換公式 ai ai-5-652665; 或者 ai ai21-652665;溫馨提示 A在ASCII碼中是65本題還要特別注意輸入數據的格式,每組數據占3行,但只有中間一行是需要處理的,在讀人數據時要跳過第1行和第3行。另外,輸入數據結束“ENDOF”為標志的。,whilegetsa ifstrcmpa, “ENDOF“ 0 break; getsa; int i 0; whileai 0 ifai A ,include include int main char a210; whilegetsa ifstrcmpa, “ENDOF“ 0 break; getsa; int i 0; whileai 0 ifai A ,字符編碼,所謂字符編碼就是將字符串中的每個字符按照編碼規則轉換成一個數字或一串數字或者將字符串中具有某種規律的子串轉換成一串數字或其他字符等。,Soundex(ZJU 1858),Soundex編碼方法根據單詞的拼寫將單詞進行分組,使得同一組的單詞發音很接近。例如,“can”與“khawn”,“con”與“gone”在Soundex編碼下是相同的。 Soundex編碼方法將每個單詞轉換成一串數字,每個數字代表一個字母。規則如下 1代表B,F,P或V; 2代表C,G,J,K,Q,S,X或Z; 3代表D或T; 4代表L; 5代表M或N; 6代表R。 而字母A,E,I,O,U,H,W和Y不用任何數字編碼,并且相鄰的、具有相同編碼值的字母只用一個對應的數字代表。具有相同Soundex編碼值的單詞被認為是相同的單詞。輸入描述 輸入文件中的每行為一個單詞,單詞中的字母都是大寫,每個單詞長度不超過20個字母。 輸出描述 對輸入文件中的每個單詞,輸出一行,為該單詞的Soundex編碼。 樣例輸入 樣例輸出 KHAWN 25 PFISTER 1236 BOBBY 11,題目分析,比如樣例輸入中的第一個單詞”KHAWN”,它的Soundex編碼值之所以是“25”,是因為第一個字母“K”的編碼值為“2”,而接下來的三個字母“H”、“A”和“W”都沒有編碼值,最后一個字母“N”的編碼值為“5”。樣例輸入中的最后一個單詞“BOBBY”,它的Soundex編碼值之所以是“11”,是因為第一個字母。“B”的編碼值為“1”,第2個字母“O”沒有編碼值,之后兩個字母“B”相鄰,只編碼成一個“1”,最后一個字母“Y”沒有編碼值。 從上面的分析可以看出,題目中提到的“相鄰的、具有相同編碼值的字母只用一個對應的數字代表”,如果具有相同編碼值的字母之間間隔了若干個沒有編碼值的字母,則要單獨編碼。例如BB編碼成“l”,“BV”也編碼成“1”,而“BOB”編碼成“11”。本題在處理時可以把26個字符的編碼值(數字字符)按順序存放到一個字符數組中,對沒有編碼值的字符,用“*”號表示。然后對字符串中的每個字符,輸出其對應的數字;如果后一個字母的編碼值跟前一個字母的編碼值一樣,則后一個字母的編碼值不輸出。,include include int main char change27 “*123*1222455*12623*1*2*2“; char 21; int i; whilescanf“s“, EOF int len; char temp; char prev 0; len strlen; fori 0; i len; i temp changei-A; iftemp * prev 0; continue; if temp prev continue; printf“c“, temp; prev temp; printf“n“; return 0; ,回文的判斷與處理,所謂回文palindrome字符串,就是從左向右讀和從右向左讀結果相同的字符串。回文的判斷與處理經常出現在ACM/ICPC題目中。判斷回文的方法很簡單,假設字符串長度為n,只需依次判斷字符串中第i個字符與第n-l-i個字符是否相等即可,i0,1,2,3n/2。,int huiwenchar *s char *p1, *p2; int i, t 1; p1 s; p2 sstrlens-1; fori 0; i strlens/2; i if*p1 *p2 t 0; break; p1; p2; return t; ,子串處理,字符串中任意一個連續的字符組成的字符序列被稱為該字符串的子串。有時,從字符串中抽取不連續的字符所組成的字符序列,也可以看成是字符串的子串。 需要說明的是,子串處理中的問題大多都屬于子串匹配的問題,其中涉及的算法(如KMP算法)比較復雜,我們不在這里進行討論。,字符串的包含問題(ZJU 1970),題目描述 給定兩個字符串s和t,判斷s是否是t的子串,也就是說,是否能通過從t中去掉一些字符,使得剩余的字符構成的字符串為s。 輸入描述 輸入文件包含多個測試數據,每個測試數據占一行,為兩個字符串s和t,這兩個字符串是由大小寫字母字符構成的,兩個字符串之間用空格隔開。輸人數據一直到文件尾。 輸出描述 對輸入文件中的每個測試數據,判斷s是否為t的子串。 樣例輸入 樣例輸出 person compression No VERDI vivaVittorioEmanueleReDiltalia Yes,題目分析,對字符串s的第0個字符s0,在字符串t中進行查找,假設查找到,其第一次出現的位置為t0;在字符串t的t0下一個位置繼續查找s1,假設查找到,其(第一次出現的)位置為t1l;在字符串t的t1下一個位置繼續查找s2。如果都能查找到s中的每個字符,則s是t的“子串”;否則如果s中后面某些字符在t中沒有找到對應的字符,則s不是t的“子串”。 例如,對樣例輸入中的第1個測試數據,按照上述方式在字符串t中查找到字符串s中的前兩個字符s0和s1后,后面的4個字符沒能在t中查找到,所以s不是t的“子串”。相反,在第2個測試數據中,在t中都能查找到s中的每個字符,所以s是t的“子串”。,char s1000000; char t1000000; int main long ls, lt; long ps, pt; whilescanf“s s“, s, t EOF ls strlens; lt strlent; forps pt 0; ps ls ,Thank You ,
總結
以上是生活随笔為你收集整理的c语言字符串文库总结,C语言字符串.ppt的全部內容,希望文章能夠幫你解決所遇到的問題。

- 上一篇: 老板电器是上市公司吗
- 下一篇: linux etc 漏洞利用,漏洞利用