输入字符串:“这是一个字符串” 输出“ 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]);
}
}
}
答案 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)
您的代码有一些问题。
您正在使用两个字符串ustr
和lstr
。您应该改用一个字符串存储结果,并将char.ToLower
和char.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.IsLower
和char.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));