為啥寫這個呢?是因為今天有被hr問道這個問題,但沒有手撕,只是說下思路,我打算自己實現一下。
題目描述:
請設計乙個自動拼寫檢查函式,對輸入單詞的錯誤依據字典進行修正。
輸入為乙個單詞和一組字典單詞,每個單詞長度不超過9位;
若字典中沒有與輸入相同的單詞,認為輸入單詞錯誤,需要從字典中選擇乙個修正單詞;
修正要求:與輸入單詞長度相同,且單詞中不同字元數最少;
存在多個修正單詞時,取字典中的第乙個;
輸出修正後的單詞。
分析:對於拼寫檢查的**,就是只檢查你輸入的對還是不對,但這個題是要**使用者到底想要輸入啥,所以用了個**的演算法
/
/先進行特殊處理
輸入為空指標的情況 /
/處理 if 輸入的字串長度==字典裡的字串長度
else
**://拼寫檢查程式,輸出修正後的單詞
#include
#include
#include
using
namespace std;
#define max_word_len 9
//比較輸入的字串長度與字典中的字元找出字元不同的個數
intdiffcharcount
(const
char
*s1,
const
char
*s2)
s1++
; s2++;}
return count;
}//拼寫檢查
void
fixword
(const
char
*pinputword,
long lwordlen,
const
char pwordsdic[
][max_word_len]
,long ldiclen,
char
*poutputword)
int inputwordlen =
strlen
(pinputword)
;//求輸入單詞的長度
//處理
//求每個單詞的長度
int*wordlen;
wordlen =
(int*)
malloc
(sizeof
(int
)*ldiclen)
;for
(int x=
0; x)//比較輸入單詞與單詞表中長度相同的單詞
int min = max_word_len;
for(
int j=
0;j)//否則返回相似度最大的單詞
else}}
//free(wordlen);}}
//主函
intmain()
;char poutputword[max_word_len]
;fixword
(pinputword,
4, pwordsdic,
3, poutputword);
cout
}
筆記:
今天的筆記就是這個#include
標頭檔案裡邊的內容,這是乙個c標準庫,這兩天用c++用多了,把c的標準庫快忘掉了。
#include
標頭檔案裡定義了各種操作字串的函式,很實用。
void *memchr(const void *str, int c, size_t n)
在引數 str 所指向的字串的前 n 個位元組中搜尋第一次出現字元 c(乙個無符號字元)的位置。
返回為無符號型,因此可以將其進行強制轉換成各種其他型別。
int memcmp(const void *str1, const void *str2, size_t n)
把 str1 和 str2 的前 n 個位元組進行比較。比較的是ascci碼值。
返回值
如果返回值 < 0,則表示 str1 小於 str2。
如果返回值 > 0,則表示 str2 小於 str1。
如果返回值 = 0,則表示 str1 等於 str2。
void *memcpy(void *dest, const void *src, size_t n)
從 src 複製 n 個字元到 字元陣列dest中。
返回也是這個指標dest。
注意:複製完成後的字串並不包括』\0』,需要自己加上。
這是一些練習的例子:
庫的使用
#include
#include
using
namespace std;
intmain()
整幾個常用的吧
strcmp(const char *str1, const char *str2)
把 str1 所指向的字串和 str2 所指向的字串進行比較。
int strncmp(const char *str1, const char *str2, size_t n)
把 str1 和 str2 進行比較,最多比較前 n 個位元組。
char *strcpy(char *dest, const char *src)
把 src 所指向的字串複製到 dest。
char *strncpy(char *dest, const char *src, size_t n)
把 src 所指向的字串複製到 dest,最多複製 n 個字元。
下來就是覺得會常用,但是還沒用過的一些函式
char *strchr(const char *str, int c)
在引數 str 所指向的字串中搜尋第一次出現字元 c(乙個無符號字元)的位置。
該函式返回在字串 str 中第一次出現字元 c 的位置,如果未找到該字元則返回 null。
size_t strlen(const char *str)
計算字串 str 的長度,直到空結束字元,但不包括空結束字元。
該函式返回字串的長度。
char *strrchr(const char *str, int c)
在引數 str 所指向的字串中搜尋最後一次出現字元 c(乙個無符號字元)的位置。
該函式返回 str 中最後一次出現字元 c 的位置。如果未找到該值,則函式返回乙個空指標。
char *strstr(const char *haystack, const char *needle)
在字串 haystack 中查詢第一次出現字串 needle(不包含空結束字元)的位置。
該函式返回在 haystack 中第一次出現 needle 字串的位置,如果未找到則返回 null。
2 4 4 編譯時檢查程式
2.4.4 編譯時檢查程式 使用編譯時型別化 using compile time typing 的最大好處是能防止許多常見的錯誤,而且編譯的 執行更有效。在函式語言中,還有其他一些好處。最重要的是,型別能夠指定定函式彼此之間如何組合。型別不僅能幫助寫出正確的 而且提供了有價值的資訊 為開發人員來說...
字串匹配之三 拼寫錯誤檢查程式
dna的匹配畢竟離生活還是遠了點,既然是字串匹配,可不可以做個拼寫錯誤檢查呢?dist len x len y score x,y score指的是全域性匹配返回的分數。但是scoring matrix怎麼辦呢?我找了一些我自己可以數得出來編輯距離的字串,然後把一些可能的值乙個乙個去算。這裡提到的s...
C原始碼的檢查程式
任務和 專案5 程式設計處理c源 在codeblocks等ide中都提供了 格式整理的功能。我們可以編寫程式,處理的資料就是用c寫的源 檔案。c原始檔是一種文字檔案,可以通過程式進行操作。1 讀入乙個c程式,判斷其中是否只有乙個main 函式,輸出 暫時沒有發現問題 或者 沒有main 函式 或者 ...