簡體   English   中英

如何根據另一個字符串更改字符串的大小寫?

[英]How to change a string's case based on another string?

我正在研究一個“你是說…… ”有點類似於谷歌的系統! 拼寫器部分很簡單(使用 PHP 的 pspell 庫),但我無法解決的是大小寫問題。

假設拼錯的詞是“GoVeNMeNt”,那么正確的詞應該是“GoVerNMeNt”(類似於谷歌),但pspell 庫僅在一種情況下(通常是小寫)給出建議。

那么我如何編寫一個函數transformCase來接收實際字符串( $string )和建議字符串( $subject )? 我編寫了以下無法處理所有情況的實現:

function transformCase($string,$subject){
    for ($i=0,$marker=0;$i<strlen($string);++$i)
        if (strcasecmp($string[$i],$subject[$marker])==0){
            $subject[$marker]=$string[$i];
            $marker+=1;
        }
        elseif (strlen($string)==strlen($subject))
            $marker+=1;
    return $subject;
}
echo transformCase("AbSaNcE",'absence')."\n";  # AbSeNcE :)
echo transformCase("StRioNG",'string')."\n";   # StRiNG  :)
echo transformCase("GOVERMENt",'government')."\n"; # GOVERNment :<

在最后一種情況下,輸出應該是 GOVERnMENT。 該算法也不適用於各種其他查詢。

所以如果有人幫助我解決算法,我會很高興:)

嘗試對算法進行下一個修改:

function transformCase($string,$subject) {
    for ($i=0,$marker=0;$i<strlen($string);++$i) {
        if (strcasecmp($string[$i],$subject[$marker])==0) {
            $subject[$marker]=$string[$i];
            $marker+=1;
        }
        // Look for the next same character in $string
        while (strcasecmp($string[$i],$subject[$marker])!=0) {
            $i+=1;
        }
    }
    return $subject;
}

比較elseif (strlen($string)==strlen($subject))不保證該函數按您的需要工作。 否則,您可以引入額外的修改以獲得最佳性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM