我練習了我的邏輯來改進,但是我缺少兩個 for 回圈的數字,一個用于收集字母以從名稱中存盤到陣列中,另一個用于存盤每個要求字母將小寫轉換為大寫的字母姓名。
對不起,我的英語很弱。
示例控制臺應用程式顯示:
插入你的名字:
約翰
插入任何要轉換為大寫的字母:
簡
輸出: 約翰
我的代碼如下:
string name = "";
Console.WriteLine("Insert your name");
name = Console.ReadLine();
string letter = "";
Console.WriteLine("Insert of letter");
letter = Console.ReadLine();
char[] ch = name.ToCharArray();
string[] name2 = new string[name.Length];
char[] chletter = letter.ToCharArray();
string[] letterArray = new string[chletter.Length];
for (int i = 0; i < ch.Length; i ) //loop count of each letters from the names.
{
name2[i] = ch[i].ToString();// convert fullname into letters to store into string Name2
}
for (int i = 0; i < letterArray.Length; i )
{
letterArray[i] = chletter[i].ToString().ToUpper();
}
for (int i = 0; i < letterArray.Length; i )
{
if (name2[i].ToUpper() == letterArray[i]) // Find letter from name2 array when you ask for.
{
name2[i] = letterArray[i];
}
}
for (int i = 0; i < name2.Length; i )// display value from array
{
Console.Write(name2[i]);
}
uj5u.com熱心網友回復:
您應該能夠在不使用索引的情況下在一個回圈中完成它,這應該可以消除無效索引的問題
var name = Console.ReadLine().ToCharArray();
var lettersToChange = Console.ReadLine().ToCharArray().ToHashSet();
var builder = new StringBuilder();
foreach (var letter in name)
{
var newLetter = lettersToChange.Contains(letter)
? Char.ToUpper(letter)
: letter;
builder.Append(newLetter);
}
var result = builder.ToString();
uj5u.com熱心網友回復:
這聽起來像是一項家庭作業,但無論如何這里有一些提示......
1- 您可以像這樣創建新陣列:
string[] letterArray = new string[chletter.Length];
但這實際上不是 chkletter 字串的“值”,它只是一個大小相同的新陣列(但沒有實際內容)
2- 創建字符陣列的部分(參見 1)
char[] chletter = letter.ToCharArray();
已經是同一個陣列(但有實際內容)
3- 為什么每次運行該回圈時都要將單個字符轉換為字串并轉換為大寫?
letterArray[i] = chletter[i].ToString().ToUpper();
如果您只需要這樣做一次,會不會更容易(并且性能更好)?
最后
4- 如果您已經將字串轉換為大寫,您能找到一種方法在單個回圈中比較這些字符中的任何一個嗎?
這不是刻薄,而是想一想你的要求和你試圖實作的目標。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/319243.html
