C# 如何将代码C中的每三个字符大写?
我正在学习C语言,但有些东西让我很沮丧。我正在学习字符串方法及其工作原理C# 如何将代码C中的每三个字符大写?,c#,string,toupper,C#,String,Toupper,我正在学习C语言,但有些东西让我很沮丧。我正在学习字符串方法及其工作原理 public static void CaseFlip() { Console.WriteLine(" CaseFlip -- Output"); Console.WriteLine("============================================================================
public static void CaseFlip()
{
Console.WriteLine(" CaseFlip -- Output");
Console.WriteLine("==============================================================================");
for (int i = 0; i < text.Length; i ++)
{
char[]delimiters = {'/'};
string[]splitString = text.Split(delimiters);
for (int k = 0; k < splitString.Length; k +=3)
{
string sub = text.Substring(0);
string remove = sub.Remove(4, text.Length);
string insert = remove.Insert(0, sub);
splitString[k] = splitString[k].ToUpper();
Console.WriteLine(splitString[k]);
}
}
Console.WriteLine(" ");
}
怎么办?不需要先进行循环;单个循环应该迭代文本中的分隔符数量。
此外,您将在这一行中得到一个异常
string remove = sub.Remove(4, text.Length);
因为您正试图通过删除整个文本的一部分来创建新字符串,从第4个字符开始,使用与text.Length一样多的字符-实际上超出了范围。
试试这个:
public static void CaseFlip(string text)
{
Console.WriteLine(" CaseFlip -- Output");
Console.WriteLine("==============================================================================");
char[] delimiters = { '/' };
string[] splitString = text.Split(delimiters);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < splitString.Length; i++)
{
char[] charsInLine = splitString[i].ToCharArray();
for (int k = 0; k < charsInLine.Length; k++)
{
sb.Append(k % 3 == 0 ? char.ToUpper(charsInLine[k]) : charsInLine[k]);
}
sb.Append(' ');
}
Console.WriteLine(sb.ToString());
Console.WriteLine(" ");
}
你应该考虑使用String Bu建器类来进行这样的字符串操作。要使用它,只需将using System.Text添加到文件顶部。
您可以使用Substring选择要转换为大写的字符,然后使用Remove从字符串中删除该原始字符,然后使用Insert将大写字符添加回。因为字符串是不可变的,所以还需要将中间步骤存储在变量中,以便将更改转入下一个周期 公共静态无效案例翻转 { Console.WriteLine CaseFlip-输出; 控制台。写入线==========================================================================================================================================================================================================================================================================================================================================================================================================; var splitString=text.Split'/'; 对于变量i=0;ivar chars = text.ToCharArray();
for (int i = 0; i < chars.Length; i += 3)
{
if (char.IsLetter(chars[i]) && chars[i] >= 'a')
chars[i] = (char)(chars[i] - 32);
}
text = new string(chars);
以下是我对此的看法:
string text =
"You only have one chance to make a first impression/" +
"Consider the source and judge accordingly/" +
"You can do something for a day you can't imagine doing for a lifetime/" +
"Are we not drawn onward, we few, drawn onward to new era/" +
"Never odd or even/" +
"Madam, I'm Adam/" +
"What do you mean? It's not due tomorrow, is it?";
string result = new string(
text
.Select((c, i) => i % 3 == 0 ? char.ToUpper(c) : c)
.ToArray());
你只有一次机会给人留下第一印象/考虑来源并做出相应判断/你可以做一件你一辈子都无法想象的事情/我们不是在前进吗,我们很少,在新时代前进/从不奇数或偶数/夫人,我是亚当/你是什么意思?明天不到期,是吗
好的,很酷。但是,如何将字符串数组中的每三个字符大写?例如,我试图复制:你只有一个机会,第一个印象,考虑来源和判断,因此你可以做一天,你不能想象做一辈子,我们不向前,我们很少,吸引到新的时代从来没有奇怪,甚至夫人,我是亚当是什么意思?明天还没到期,是吗?啊,很抱歉没有准确回答这个问题。我已经更新了代码。您也可以考虑使用StringBuilder,正如我在代码中所做的那样,如果您打算稍后重用该输出,而不只是将其输出到控制台。代码中还有更多的内容,然后简单地将每第三个字母大写。你能将示例代码简化为问题所指的代码吗?@LorenPechtel-我想知道先学习LINQ是什么感觉。也许会更好。我的意思是,我从Commodore Basic和6502机器代码开始,我不希望这些基础知识在现在的人们身上出现。当LINQ工作时,它很好。如果没有,调试是一件非常痛苦的事情。当你改变某些东西并破坏它时,调试是一件非常痛苦的事情。因为这个原因,我很少使用它。@LorenPechtel-这里有不同的视角很有趣。我使用LINQ的原因之一是因为它不太可能首先创建错误代码。通常它会创建清晰的线性代码,这很容易推理。我同意@LorenPechtel的观点,即调试非常困难,虽然它看起来好得多,而且肯定会让程序员对自己能够在几行代码中表达多个代码块“感觉良好”:但我也认为,对于刚开始使用字符串的人来说,这是一个有点太高级的主题。
string text =
"You only have one chance to make a first impression/" +
"Consider the source and judge accordingly/" +
"You can do something for a day you can't imagine doing for a lifetime/" +
"Are we not drawn onward, we few, drawn onward to new era/" +
"Never odd or even/" +
"Madam, I'm Adam/" +
"What do you mean? It's not due tomorrow, is it?";
string result = new string(
text
.Select((c, i) => i % 3 == 0 ? char.ToUpper(c) : c)
.ToArray());