2017-02-06 1 views
0

J'ai 2 chaînes. Chaque ut dans une liste en utilisant une boucle foreach. J'utilise ensuite une boucle for pour parcourir chaque caractère dans les 2 listes pour voir s'il y a une différence. Une fois que je trouve une différence entre les chaînes, je veux trouver le début et la fin de ce mot qui a changé, par exemple. String1 est différent String2 Je veux que la sortie soit "String1 String2 is the first second string". Je prévois trouver le début et la fin du mot modifié à l'aide indexOf et au moment où il est de ne pas trouver la position de l'indice.Trouver le début et la fin d'un mot dans une chaîne en utilisant l'index de

static void Main(string[] args) 
    { 

     const string a = "String1 is the first string"; 
     const string b = "String2 is the second string"; 
     List<String> listString1 = new List<string>(); 
     List<String> listString2 = new List<string>(); 
     foreach (var item in a) 
     { 
      listString1.Add(item.ToString()); 
     } 

     foreach (var item in b) 
     { 
      listString2.Add(item.ToString()); 
     } 
     for (int i = 0; i < a.Length; i++) 
     { 
      var or = listString1[i]; 
      var ed = listString2[i]; 

      int nextSpace = or.IndexOf(' ', index); 
      int previousSpace = or.LastIndexOf(' ', index); 
      if (or!=ed) 


      { 

       Console.WriteLine(); 
      } 
     } 

    } 
+0

vous devez utiliser le débogueur et parcourir votre code ... en regardant simplement vos 2 premières boucles foreach et en regardant votre boucle for, vous n'obtiendrez jamais trouver la chaîne de début et de fin .. regardez dans string.Split() fonction pour les débutants – MethodMan

+0

Je passe à travers mon code et fait exactement ce que je veux faire, c'est-à-dire passer par chaque lettre de la chaîne et trouver si un caractère est changé. Si c'est le cas, je veux trouver le mot complet où le personnage a changé, par exemple. String1 et String2 sont différents donc je veux maintenant afficher les 2 mots qui sont différents. –

+0

@CraigGallagher Cela suppose que les chaînes que vous comparez auront exactement la même longueur, et que la seule différence entre elles sera un mot/une lettre différent (e)? –

Répondre

2

Honnêtement, je suis confus au sujet de ce que vous » re essayant d'accomplir. Mais peut-être que je suis sur le bon chemin avec ce que je fournis.

static void Main(string[] args) 
{ 
    string firstString = "I am the first string"; 
    string secondString = "I am the second string"; 

    char delimiter = Convert.ToChar(" "); 

    if (firstString.Equals(secondString)) 
    { 
     Console.WriteLine("Both strings are equal"); 
     Console.ReadLine(); 
    } 
    else 
    { 
     var firstStringList = firstString.Split(delimiter).ToList(); 

     // ["I", "am", "the", "first", "string"] 

     var secondStringList = secondString.Split(delimiter).ToList(); 

     // ["I", "am", "the", "second", "string"] 

     foreach (var word in firstStringList) 
     { 
      if (secondStringList.IndexOf(word) == -1) 
      { 
       var indexOfWord = firstStringList.IndexOf(word); // 3 
       secondStringList.Insert(indexOfWord, word); // Insert the word that was not found at position 3 inside secondStringList 
       // ["I", "am", "the", "first", "second", "string"] 
       // [ 0, 1, 2,  3,  4,   5 ] 
       Console.WriteLine(string.Join(" ", secondStringList)); 
       // Join the secondStringList to make 1 string separated by the space character 
       Console.ReadLine(); 
      } 
     } 

    } 
} 

Ce code va diviser la première chaîne & deuxième chaîne dans des listes de chaînes contenant les mots qui composent les chaînes .. alors en boucle à travers la première liste de chaînes et comparer chaque mot dans cette liste les mots la deuxième liste de chaînes .. une fois qu'il trouve le mot dans la première chaîne qui n'existe pas dans la deuxième chaîne .. il imprimera ce mot.

Encore une fois, je ne suis pas sûr de l'objectif de cela, mais laissez-moi savoir en fonction de ce que j'ai posté ce qui doit être personnalisé.

+0

La raison pour laquelle je passais par chaque affréteur dans la chaîne était parce qu'une fois que j'ai trouvé une différence dans une lettre dans la deuxième chaîne, je voulais ajouter mot à ma première chaîne juste après où le mot a changé donc quelque chose comme ça "Je suis la première chaîne deuxième" obtenez-vous ce que j'essaie d'atteindre ici? –

+0

@CraigGallagher voir mon edit –

+0

Vous êtes un legand –

0

heureux de base solution -path ..

string newString = ""; 

string[] as1 = "String1 is the first string".Split(new char[] { ' ' }); 
string[] as2 = "String2 is the second string".Split(new char[] { ' ' }); 

for (int ndx = 0; ndx < as1.Length; ndx++) 
{ 
    newString += (as1[ndx] == as2[ndx]) ? as1[ndx] : as1[ndx] + ' ' + as2[ndx]; 
    newString += ' '; 
} 

vous devez vérifier les limites sur les tableaux au moins. Mais je ne vais pas faire tous vos devoirs pour vous :)