解決了!謝謝 Prasad Telkikar 添加了更新的代碼
我知道有很多類似的問題被問到,我已經查看了這些問題,但我仍然無法找出我的解決方案。我正在嘗試撰寫一種方法,該方法將輸入字串的第一個字符移到后面,然后如果需要,我可以添加其他字符。基本上,如果輸入是Hello,則輸出將是elloH "whatever"。我希望這是有道理的。為了證明我并不懶惰,這里是我正在處理的其他部分的其余源代碼。這一切都有效,我只是不知道從哪里開始最后一部分。感謝您的尋找并感謝您的幫助!
private void BtnTransform_Click(object sender, EventArgs e)
{
string str = txtInput.Text; //get input
txtSwitchCase.Text = this.CaseSwap(str); //display CaseSwap method results
txtReverse.Text = this.Reverse(str); //display Reverse method results
txtPigLatin.Text = this.Latin(str); //display the Latin method results
}
private string CaseSwap(string str)//method for swaping cases
{
string result = ""; //create blank var
foreach (var c in str)
if (char.IsUpper(c)) //find uppers
result = char.ToLower(c); //change to lower
else
result = char.ToUpper(c); //all other lowers changed to upper
str = result; //assign var to str
return str; //return string to method
}
private string Reverse(string str)//method for reversing string
{
char[] revArray = str.ToCharArray(); //copy into an array
Array.Reverse(revArray); //reverse the array
return new string(revArray); //return the new string
}
private string Latin(string str)//method for pig latin
{
string result = str.Substring(1) str[0] "ay";
str = result;
return str;
}
}
}
uj5u.com熱心網友回復:
如果您想將第一個字符移動到字串的末尾,那么您可以在下面嘗試
public string MoveFirstCharToEnd(string str, string whateverStr="")
{
if(string.IsNullOrEmpty(str))
return str;
string result = str.Substring(1) str[0] whateverStr;
return result;
}
注意:我添加whateverStr了一個可選引數,因此它可以只支持將第一個字符移動到末尾,并且它還支持將額外的字串連接到結果中。
String.Substring(Int32):
從此實體中檢索子字串。子字串從指定的字符位置開始,一直持續到字串的末尾。
uj5u.com熱心網友回復:
為什么不只取第一個字符并將其與字串的其余部分結合起來呢?例如
Hello
^^ ^
|| |
|Substring(1) - rest of the string (substring starting from 1)
|
value[0] - first character
代碼:
public static string Rotate(string value) => string.IsNullOrEmpty(value)
? value
: $"{value.Substring(1)}{value[0]}";
任意旋轉的廣義實作(正或負):
public static string Rotate(string value, int count = 1) {
if (string.IsNullOrWhiteSpace(value))
return value;
return string.Concat(Enumerable
.Range(0, value.Length)
.Select(i => value[(i count % value.Length value.Length) % value.Length]));
}
您可以在Linq的幫助下簡化當前的實作
using System.Linq;
...
private static string CaseSwap(string value) =>
string.Concat(value.Select(c => char.IsUpper(c)
? char.ToLower(c)
: char.ToUpper(c)));
private static string Reverse(string value) =>
string.Concat(value.Reverse());
uj5u.com熱心網友回復:
您可以嘗試使用String.Substring(int startPosition, int length) 方法獲取字串的第一個字符。使用此方法,您還可以從位置 1 開始獲取其余文本(跳過第一個字符)。當你有這 2 件時,你可以連接它們。
不要忘記檢查空字串,這可以通過String.IsNullOrEmpty(string text) 方法來完成。
public static string RemoveAndConcatFirstChar(string text){
if (string.IsNullOrEmpty(text)) return "";
return text.Substring(1) text.Substring(0,1);
}
uj5u.com熱心網友回復:
由于分配的字串物件的數量,將多個字符附加到字串效率低下,這不僅是記憶體密集型的,而且速度也很慢。我們有一個理由StringBuilder和其他可用的選項,比如使用char[]s.
這是一個相當快速的方法,用于旋轉字串左一個字符(將第一個字符移動到末尾):
string RotateLeft(string source)
{
var chars = source.ToCharArray();
var initial = chars[0];
Array.Copy(chars, 1, chars, 0, chars.Length - 1);
chars[^1] = initial;
return new String(chars);
}
遺憾的是,我們不能在字串本身中就地執行此操作,因為它們是不可變的,因此無法避免最后的臨時陣列和字串構造。
基于您呼叫該方法的事實以及您所說Latin(...)的問題的一點:“基本上,如果輸入是 Hello,輸出將是 elloH “隨便什么。”......我假設你正在寫一個 Pig拉丁語翻譯。如果是這樣的話,你將需要更多。
Pig Latin 是一個有點棘手的問題,因為它基于單詞的發音,而不是字母。例如,onto成為ontohay(或其變體)而one成為unway,因為單詞發音相同won(用 au來正確捕捉元音發音)。英語的拼音操作很煩人,因為所有的變體都帶有無聲和隱含的首字母。甚至不要讓我開始使用偽元音,如y.
撇開特殊情況不談,Pig Latin 翻譯代碼最常見的規則如下:
以單個輔音后跟元音開頭的單詞:將輔音移到末尾并附加
ay。以一對輔音后跟一個元音開頭的單詞:將輔音對移到末尾并附加
ay。以元音開頭的單詞:append
hay,yay,tay, 等。
第三個有點困難,因為選擇正確的后綴是什么使結果最容易說出來……哪個代碼不能真正輕易地決定一切。隨便挑一個就行了。
當然,有很多詞不符合這些規則。例如,任何以輔音三連音開頭的東西(Christmas首先想到的,然后是strip……和其他)。偽元音喜歡y把事情搞砸(cry例如)。當然,當您剝離背景關系時,正確表示初始元音聲音的永遠存在的問題是:won轉換為un-way聲音,因此將其呈現為on-way文本有點錯誤。與 相同word,其 Pig 拉丁語版本的發音是erd-way。
不過,對于簡單的第一次通過...只需遵循規則,y如果它是第一個字母,則將其視為輔音,并在第二或第三個位置視為元音。
And since this is so often a homework problem, I'm going to stop here and let you play with it for a bit. Just in case :P
(Oh, and don't forget to preserve the case of your first character just in case you're working on a capitalized word. Latin should become Atinlay, not atinLay. Just saying.)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/435966.html
標籤:C#
上一篇:如何將鍵值類轉換為json
下一篇:使用XUnit在測驗中運行
