Chaîne d'entrée: "Ceci est une chaîne" Sortie "tTHIS IS A sTRING
Je suis capable de convertir les majuscules en minuscules mais je ne suis pas en mesure de les lier :(.
voici mon code .. quelqu'un pourrait s'il vous plaît aidez-moi ici?
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 Réponses :
Par "les lier", je suppose que vous voulez dire comment obtenir une chaîne résultante entière? Dans ce cas, pas besoin d'utiliser à la fois les variables lstr et ustr, utilisez une seule.
Par exemple: remplacez la ligne
lstr += char.ToUpper(strchararr[i]);
par
ustr += char.ToUpper(strchararr[i]);
Utilisez linq
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);
Ou une approche foreach
for (var i = 0; i < str.Length; i++)
result += char.IsUpper(str[i]) ? char.ToLower(str[i]) : char.ToUpper(str[i]);
ou
for (int i = 0; i < str.Length; i++)
if (char.IsUpper(str[i]))
result += char.ToLower(str[i]);
else
result += char.ToUpper(str[i]);
ou une boucle for
foreach (var c in str)
result += char.IsUpper(c) ? char.ToLower(c) : char.ToUpper(c);
ou
foreach (var c in str)
if (char.IsUpper(c))
result += char.ToLower(c);
else
result += char.ToUpper(c);
Ou une version de pointeur unsafe ridiculement stupide (mais super efficace) (ASCII uniquement)
var converted = str.Select(x => char.IsUpper(x) ? char.ToLower(x) : char.ToUpper(x)); var result = new string(converted.ToArray);
result + = - ajoutez-vous vraiment des caractères à une chaîne dans une boucle?
@ AntonínLejsek non, regarde autour de lui avec nervosité
Votre code a quelques problèmes.
Vous utilisez deux chaînes ustr et lstr . Vous devriez plutôt utiliser une seule chaîne pour stocker le résultat, et ajouter le résultat de char.ToLower et char.ToUpper à cette chaîne.
Vous ne traitent pas non plus autre chose que AZ et az. Vous devez ajouter un bloc else pour simplement ajouter quel que soit le caractère (aucune conversion nécessaire).
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);
Si vous voulez gérer les lettres d'autres alphabets (par exemple cyrillique, grec), vous devez utiliser char.IsLower et char.IsUpper pour vérifier la casse.
Merci beaucoup pour votre aide et vos explications. C'est tout à fait logique.
@ Ash0214 Veuillez considérer d'accepter la réponse qui vous semble la meilleure en cliquant sur cette coche!
Avec des caractères comme nombres:
applicable lorsque tous les caractères ont des CodePoints inférieurs à 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));
Que voulez-vous dire
mais je ne suis pas en mesure de les liervérifiez si
Char.IsUpperouChar.IsLowerpuis utilisezChar.ToUpper ()ouChar.ToLower () code >