Home > Enterprise >  Sorting a given string - What is wrong with my IF Contains block?
Sorting a given string - What is wrong with my IF Contains block?

Time:01-04

Super new to C# apologize upfront. My goal is to sort a given string. Each word in the string will contain a single number. This number is the position the word should have in the result. Numbers can be from 1 to 9. So 1 will be the first word (not 0).

My plan of attack is to split the string, having one variable of int data-type (int lookingForNum) and the other variable turning that into a String data-type(string stringLookingForNum), then for each loop over the array looking to see if any elements contain string stringLookingForNum, if they do I add it to an emptry string variable, lastly add 1 to int variable lookingForNum. My issue seems to be with the if statement with the Contains method. It will not trigger the way I currently have it written. Hard coding in if (word.Contains("1")) will trigger that code block but running it as written below will not trigger the if statement.Please can anyone tell my WHY!?!? I console.log stringLookingForNum and it is for sure a string data type "1"

This noobie would appreciate any help. Thanks!

string testA = "is2 Thi1s T4est 3a";  //-->  "Thi1s is2 3a T4est"
string[] arrayTestA = testA.Split(' ');
string finalString = string.Empty;

int lookingForNum = 1; //Int32
foreach (string word in arrayTestA){
    string stringLookingForNum = lookingForNum.ToString(); 
    
    //Don't understand why Contains is not working as expected here)
    if (word.Contains(stringLookingForNum)){
        finalString = finalString   $"{word} ";
        
    }
    lookingForNum  ;
    
}

CodePudding user response:

you need this - look for the string with 1, the look for the string with 2 etc. Thats not what you are doing

you look at the first string and see if it contains one

then look at the second one and see if it contains 2 ....

 int lookingForNum = 1;
 while(true){ // till the end
     string stringLookingForNum = lookingForNum.ToString(); 
     bool found = false;
     foreach (string word in arrayTestA){
        
        if (word.Contains(stringLookingForNum)){
           finalString = finalString   $"{word} ";
           found = true;
           break;
        }
      }
      if(!found) break;
  
   lookingForNum  ;
}

CodePudding user response:

To sort you should simply use OrderBy, and since you need to sort by number inside a word - just Find and extract a number from a string

string testA = "is2 Thi1s T4est 3a";
var result = testA.Split().OrderBy(word =>
    Int32.Parse(Regex.Match(word, @"\d ").Value));
    
Console.WriteLine(string.Join(" ", result));
  • Related