Georgi Delchev Georgi Delchev - 3 years ago 175
C# Question

How to take digits from two different numbers and form a new one

I have the following problem here:My input is several lines of 2 digit numbers and I need to make a new number using the second digit of the first number and the first of the next one.

int linesOfNumbers = Convert.ToInt32(Console.ReadLine());
for(int i = 0,i<linesOfNumbers,i++)
int numbers = Conver.ToInt32(Console.ReadLine());
//that's for reading the input

I know how to separate the numbers into digits.My question is how to merge them.
For example if your input is 12 and 21 the output should be 22.

Answer Source

I like oRole's answer, but I think they're missing a couple things with the example input that you provided in your comment. I'll also point out some of the errors in the code that you have.

First off, if you're only given the input 12,23,34,45, then you don't need to call Console.ReadLine within your for loop. You've already gotten the input, you don't need to get any more (from what you've described).

Secondly, unless you're doing mathematical operations, there is no need to store numerical data as ints, keep it as a string, especially in this case. (What I mean is that you don't store Zip Codes in a database as a number, you store it as a string.)

Now, onto the code. You had the right way to get your data:

var listOfNumbers = Console.ReadLine();

At that point, listOfNumbers is equal to "12,23,34,45". If you iterate on that variable as a string, you'll be taking each individual character, including the commas. To get each of the numbers to operate on, you'll need to use string.Split.

var numbers = listOfNumbers.Split(',');

This turns that list into four different two character numbers (in string form). Now, you can iterate over them, but you don't need to worry about converting them to numbers as you're operating on the characters in each string. Also, you'll need a results collection to put everything into.

var results = new List<string>();

// Instead of the regular "i < numbers.Length", we want to skip the last.
for (var i = 0; i < numbers.Length - 1; i++)
    var first = numbers[i];
    var second = numbers[i + 1]; // This is why we skip the last.

    results.Add(first[1] + second[0]);

Now your results is a collection of the numbers "22", "33", and "44". To get those back into a single string, you can use the helper method string.Join.

Console.WriteLine(string.Join(",", results));
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download