将大写字母替换为小写-反之亦然

时间:2019-01-03 03:53:27

标签: c# string

输入字符串:“这是一个字符串” 输出“ tTHIS IS A STRING”

我能够将大写字母转换为小写字母,但是我无法以某种方式将它们链接起来:(。

这是我的代码..有人可以在这里帮助我吗?

static void Main()
{
    string lstr = "";
    string ustr = "";
    Console.WriteLine("Enter the string");
    string str = Console.ReadLine();

    char[] strchararr = str.ToCharArray();

    for (int i = 0; i < strchararr.Length; i++)
    {

        if (strchararr[i]>='a'&& strchararr[i]<='z')
        {
            ustr += char.ToUpper(strchararr[i]);

        }

        else if (strchararr[i] >= 'A' && strchararr[i] <= 'Z')
        {
            lstr+=char.ToLower(strchararr[i]);
        }
    }
}

4 个答案:

答案 0 :(得分:4)

使用linq

var converted = str.Select(x => char.IsUpper(x) ? char.ToLower(x) : char.ToUpper(x));
var result = new string(converted.ToArray);

或者是foreach方法

foreach (var c in str)
   if (char.IsUpper(c))
      result += char.ToLower(c);
   else 
      result += char.ToUpper(c);

foreach (var c in str)
    result += char.IsUpper(c) ? char.ToLower(c) : char.ToUpper(c);

for循环

for (int i = 0; i < str.Length; i++)
   if (char.IsUpper(str[i]))
      result += char.ToLower(str[i]);
   else 
      result += char.ToUpper(str[i]);

for (var i = 0; i < str.Length; i++)
     result += char.IsUpper(str[i]) ? char.ToLower(str[i]) : char.ToUpper(str[i]);

或者是一个愚蠢的愚蠢(至今仍非常高效)unsafe指针版本(仅ASCII)

fixed (char* cStr = str)
   for (var c = cStr; c < cStr + str.Length; c++)
     *c = (char)(*c >= 'A' && *c <= 'Z' ? *c + 32 : *c >= 'a' && *c <= 'z' ? *c - 32 : *c);

答案 1 :(得分:1)

您的代码有一些问题。

您正在使用两个字符串ustrlstr。您应该改用一个字符串存储结果,并将char.ToLowerchar.ToUpper的结果附加到该字符串。

除了A-Z和a-z以外,您还没有处理其他任何事情。您应该添加一个else块以附加任何字符(无需转换)。

    char[] strchararr = str.ToCharArray();

    for (int i = 0; i < strchararr.Length; i++)
    {

        if (strchararr[i]>='a'&& strchararr[i]<='z')
        {
            finalString += char.ToUpper(strchararr[i]);

        }

        else if (strchararr[i] >= 'A' && strchararr[i] <= 'Z')
        {
            finalString+=char.ToLower(strchararr[i]);
        } else {
            finalString += strchararr[i];
        }
    }

    Console.WriteLine(finalString);

如果要处理其他字母(例如西里尔字母,希腊字母),则应使用char.IsLowerchar.IsUpper来检查大小写。

答案 2 :(得分:0)

通过“链接它们”,我想您的意思是如何获取整个结果字符串? 在这种情况下,无需同时使用lstr和ustr变量,只需使用一个即可。

例如: 替换行

        ustr += char.ToUpper(strchararr[i]);

        lstr += char.ToUpper(strchararr[i]);

答案 3 :(得分:0)

以char作为数字:
当所有字符的CodePoints都在256以下时适用。

StringBuilder sb = new StringBuilder(input.Length);
foreach (char c in input)
    sb.Append(!char.IsLetter(c) ? c : c < 97 ? (char)(c + 32) : (char)(c - 32));
相关问题