Comment vérifier si la chaîne de caractère est un espace?
Je viens de commencer la programmation en C#. Je suis en train de construire un simple Vigenere texte outil de cryptage de car un projet personnel.
Mon problème devrait être très facile à corriger, mais c'est vraiment en insistant, me à trouver l'erreur. Dans mon code je suis en train de faire une vérification simple pour voir si oui ou non le personnage dans mon string est un espace; j'ai mis en place mon instruction si encore il saute le premier test et de passer à l'autre si, même si le premier test est vrai. Id vraiment avoir de l'aide sur celui-ci.
Mon problème se situe en bas.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class fun2013
{
public static void Main()
{
Console.WriteLine("fun 2013");
string UserName;
do
{
Console.Write("LOGIN//: ");
UserName = Console.ReadLine();
}
while(UserName != "Max");
Console.WriteLine(("Hello ") + (UserName) + (", enter your key below."));
//USER ENTERS TEXT AT THIS POINT
string loweredPass = Console.ReadLine().ToLower();
Console.WriteLine("Changing CASE...");
Console.WriteLine(loweredPass);
string Strippedpass = loweredPass.Replace(" ","");
Console.WriteLine("STRIPPING SPACES...");
Console.WriteLine(Strippedpass);
int passLength = Strippedpass.Length;
Console.WriteLine("Enter your message below.");
string userMessage = Console.ReadLine();
int MessageLength = userMessage.Length;
//BEGIN PROCESSING STRINGS INTO ARRAYS
string temp = "";
StringBuilder bcon = new StringBuilder();
char [] passArray = Strippedpass.ToCharArray();
char [] messArray = userMessage.ToCharArray();
string letterf = "";
for(int i=0, j=0; j < (MessageLength); i++, j++) //i used for key array, j used for message length
{
>>> if (messArray[i].ToString() == " ")
{
letterf = " ";
}
else if (messArray[i].ToString() != " ")
{
letterf = passArray[i].ToString();
}
if (i >= (passLength-1)) //array starts at value 0, length check starts at 1. Subtract 1 to keep them equal
{i = -1;} //-1 is used so it will go back to value of 0 on next loop
temp = letterf;
bcon.Append(temp);
}
Console.WriteLine();
Console.WriteLine(bcon);
Console.WriteLine("Press ENTER to continue...");
Console.ReadLine(); //KILL APPLICATION
}
}
Merci pour l'aide tout le monde, mais après une inspection plus poussée, j'ai remarqué, j'ai fait une erreur dans ma boucle for. J'ai été la réinitialisation du message lecteur de réseau en utilisant le même intervalle que la clé array (int i). Je l'ai changé pour utiliser le bon nombre entier, "j". J'ai aussi mis le "temp" de la chaîne de mise à jour et le générateur de chaîne dans chaque instruction if dans la boucle. Il fonctionne maintenant correctement.
for (int i=0, j=0; j < (MessageLength); i++, j++) //i used for key array, j used for message length
{
if (messArray[j].ToString() != " ")
{
letterf = passArray[i].ToString();
temp = letterf;
bcon.Append(temp);
}
else if (messArray[j].ToString() == " ")
{
letterf = " ";
temp = letterf;
bcon.Append(temp);
}
if (i >= (passLength-1)) //array starts at value 0, length check starts at 1. Subtract 1 to keep them equal
{i = -1;} //-1 is used so it will go back to value of 0 on next loop
}
Votre code ne renvoie les lettres de la clé, par exemple, si j'utilise "a" comme clé et "bonjour" comme message, c'sorties "aaaaa" quand il doit la sortie de "bonjour", de la même façon ("ab", "bonjour")->" - abeba". C'est sans aucun doute pas ce qu'est un chiffrement de Vigenère est censé faire.
OriginalL'auteur ninjatogo | 2013-10-20
Vous devez vous connecter pour publier un commentaire.
Char.IsWhiteSpace(char)
Voir aussi la
String.IsNullOrEmpty
ouString.IsNullOrWhiteSpace
.Qu'entendez-vous sauter? Est-il de l'évaluation de faux? Ou le code ne fonctionne pas du tout?
La déclaration d'exécution si je change la comparaison de chaîne de rien, mais le caractère espace. Sinon, il prendra la si route.
OriginalL'auteur Justin Lessard
Vous pouvez modifier ce code
à
Pouvez-vous mettre
>>>
pour montrer exactement la ligne où est le problème?Bien sûr, il est dans la boucle for.
Si je suis correctement, cette ligne
Console.WriteLine(bcon);
aurait l'impression d'un espace blanc, mais parce que c'est la console de l'application que vous simplement ne pas le voir. Pouvez-vous étape par le biais de l'aide d'un Débogueur? La comparaison devrait fonctionner dans les deux cas, je soupçonne qu'il ya un problème dans la logique quelque part.OriginalL'auteur oleksii
Essayer
Char.IsWhiteSpace(caractère)
Échantillon de msdn:
OriginalL'auteur Cornel Marian
Vous semblez avoir oublié l'essentiel de ce chiffre, qui est de compenser le message de lettres par un montant en fonction de la clé de lettres. Aussi, vous aurez envie d'ignorer tous les caractères qui ne peuvent pas être chiffrés pour une lettre: ":", "!", "," et donc, pas seulement des espaces.
Spoiler alert
OriginalL'auteur Andrew Morton