允许用户在C#中输入单词,然后显示该单词,并将第一个和第三个字符更改为大写。代码如下:
namespace Capitalizer
{
class Program
{
static void Main(string[] args)
{
string text = Console.ReadLine();
char[] delimiterChars = { ' ' };
string[] words = text.Split(delimiterChars);
string Upper = text.ToUpper();
Console.WriteLine(Upper);
Console.ReadKey();
}
}
}
这当然会以大写形式生成整个单词,这不是我想要的。我似乎无法制作text.ToUpper(0,2)工作,即便如此,这也是前三个字母的大写。我现在只能想到的解决方案会使单词出现在一行上(我不知道它是否有效)是将大写字母和小写字母移动到字符数组中并尝试将其打印到所有值中修改后的订单。
答案 0 :(得分:5)
我能想到的最简单的方法来解决您所描述的确切问题 - 将输入的第一个和第三个字符转换为大写字母 - 将类似于以下内容:
StringBuilder sb = new StringBuilder(text);
sb[0] = char.ToUpper(sb[0]);
sb[2] = char.ToUpper(sb[2]);
text = sb.ToString();
StringBuilder
类本质上是一个可变的字符串对象,因此在进行这些操作时,这是解决问题最流畅的方法,因为它提供了最直接的转换,以及完整的转换。字符串操作范围。在许多数据结构中,更改单个字符很容易,但插入,删除,追加,格式化等都伴随StringBuilder
,所以使用它与其他方法相比,这是一个好习惯。
但坦率地说,很难看出这是一项有用的操作。我无法帮助,但不知道你是否已经错误地陈述了这些要求,而且这个问题比这里看到的更多。
答案 1 :(得分:2)
您可以使用LINQ:
var upperCaseIndices = new[] { 0, 2 };
var message = "hello";
var newMessage = new string(message.Select((c, i) =>
upperCaseIndices.Contains(i) ? Char.ToUpper(c) : c).ToArray());
以下是它的工作原理。 message.Select
(内联LINQ查询)逐个从message
中选择字符并传入选择器函数:
upperCaseIndices.Contains(i) ? Char.ToUpper(c) : c
为if
写为C# ?: shorthand syntax。它读作“如果数组中存在索引,则选择大写字符。否则选择字符。”
(c, i) => condition
是lambda expression。另见:
其余部分非常简单 - 将结果表示为字符数组(.ToArray()
),并根据(new string(...)
)创建一个新字符串。
答案 2 :(得分:2)
我现在只能想到的解决方案会让单词出现在一行上(而且我不知道它是否有效)是将大写字母和小写字母移动到字符数组中并尝试获取以修改的顺序打印所有值。
这似乎比必要复杂得多。一旦有了字符数组,就可以简单地更改该字符数组的元素。在一个单独的函数中,它看起来像
string MakeFirstAndThirdCharacterUppercase(string word) {
var chars = word.ToCharArray();
chars[0] = chars[0].ToUpper();
chars[2] = chars[2].ToUpper();
return new string(chars);
}
答案 3 :(得分:0)
我的简单解决方案:
string text = Console.ReadLine();
char[] delimiterChars = { ' ' };
string[] words = text.Split(delimiterChars);
foreach (string s in words)
{
char[] chars = s.ToCharArray();
chars[0] = char.ToUpper(chars[0]);
if (chars.Length > 2)
{
chars[2] = char.ToUpper(chars[2]);
}
Console.Write(new string(chars));
Console.Write(' ');
}
Console.ReadKey();