設計拼寫檢查程式

2021-10-07 07:52:02 字數 3540 閱讀 4145

為啥寫這個呢?是因為今天有被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 函式 或者 ...