我正在嘗試解決標題大寫問題。我有一種方法可以接受一個句子,將其分解成單詞,將這些單詞與單詞的檢查單進行比較。數組字符串的循環迭代
基於此檢查列表,如果它們在列表中,我將小寫字母。大寫字母不在列表中。第一個和最後一個單詞總是大寫。
這裏是我的方法:
public string TitleCase(string title)
{
LinkedList<string> wordsList = new LinkedList<string>();
string[] listToCheck = { "a", "the", "to", "in", "with", "and", "but", "or" };
string[] words = title.Split(null);
var last = words.Length - 1;
var firstWord = CapitalizeWord(words[0]);
var lastWord = CapitalizeWord(words[last]);
wordsList.AddFirst(firstWord);
for (var i = 1; i <= last - 1; i++)
{
foreach (var s in listToCheck)
{
if (words[i].Equals(s))
{
wordsList.AddLast(LowercaseWord(words[i]));
}
else
{
wordsList.AddLast(CapitalizeWord(words[i]));
}
}
}
wordsList.AddLast(lastWord);
var sentence = string.Join(" ", wordsList);
return sentence;
}
與實例運行此並期待結果:
var result = TitleCase("i love solving problems and it is fun"); Assert.AreEqual("I Love Solving Problems and It Is Fun", result);
我得到相反:
"I Love Love Love Love Love Love Love Love Solving Solving Solving Solving Solving Solving Solving Solving Problems Problems Problems Problems Problems Problems Problems Problems And And And And And and And And It It It It It It It It Is Is Is Is Is Is Is Is Fun"
如果你仔細觀察一個and
是小寫。我如何解決這個問題的任何提示?
在'for'設置一個斷點,然後調試代碼然後按下「F10」來瀏覽它,看看發生了什麼。 – Quantic
使用調試器並單步執行代碼。隨時留意你的單詞列表是如何增長的,並且你會看到發生了什麼問題...... – elgonzo