仅在奇数位置反转字C#

时间:2018-05-21 09:54:07

标签: c# string

这是我的代码。如何编辑它以显示仅奇数位置的每个单词都被反转?

        for (int i = input.Length - 1; i >= 0; i--)
        {
            if (input[i] == ' ')
            {
                result =  tmp + " " + result;
                tmp = "";
            }
            else
                tmp += input[i];
        }

        result = tmp + " " + result;
        Console.WriteLine(result);

示例输入:

  

" 今天"

输出:

  

" 时代 yadot "

基于单词的位置 ['如何' - > 0]不要反转; [是 - > 1奇数索引]反转

3 个答案:

答案 0 :(得分:4)

你可以在LINQ的帮助下实现它:

var input = "hello this is a test message";
var inputWords = input.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
var result = string.Join(" ", 
                 inputWords.Select((w, i) => 
                                         i % 2 == 0
                                         ? w 
                                         : new string(w.Reverse().ToArray())
                 ));

select中的w是单词,i是索引,第一个单词从0开始。 %是模数运算符,得到余数。如果i % 2 == 0(即我可以除以2而没有余数),则返回原始数据。如果有余数(奇数)则返回反转字。最后,它全部包含在string.Join(" ", items);中,将其变回普通字符串而不是项目数组。

Try it online

答案 1 :(得分:4)

到目前为止,您有一个string,如下所示:

  string input = "I want to reverse all odd words (odd words only!).";

当然,你想要完成任务。现在问题是奇数这个词的主要问题是什么? 如果您的意思是单词的位置(位置I 0want的{​​{1}} - 应该被撤销等) 然后你可以使用正则表达式匹配单词和 Linq 来处理它们:

1

如果您要反转奇数 using System.Linq; // To reverse single word using System.Text.RegularExpressions; // To match the words within the text ... // Let's elaborate the test example: add // 1. some punctuation - ()!. - to preserve it // 2. different white spaces (spaces and tabulation - \t) // to add difficulties for naive algorithms // 3. double spaces (after "to") to mislead split based algorithms string input = "I want to reverse all\todd words (odd words only!)."; int index = 0; // words' indexes start from zero string result = Regex.Replace( input, "[A-Za-z']+", // word is letters and apostrophes match => index++ % 2 == 0 ? match.Value // Even words intact : string.Concat(match.Value.Reverse())); // Odd words reversed Console.WriteLine(result); 的字词,即LengthIall,那么您所要做的就是将条件更改为

odd

结果:

    match => match.Value % 2 == 0 

请注意,标点符号保留(仅被撤消)。

答案 2 :(得分:3)

OP:基于单词的位置['如何' - > 0]不要反转; [是 - > 1奇数索引]反向

public static void Main()
{
    string input = "How are you today Laken-C";

     //As pointed out by @Dmitry Bychenko string input = "How are you today";
    //(double space after How) leads to How are uoy today outcome 

    input = Regex.Replace(input, @"\s+", " ");
    var inp = input.Split(' ').ToList();

    for (int j = 0; j < inp.Count(); j++)
    {   
       if(j % 2 == 1)
       {
           Console.Write(inp[j].Reverse().ToArray());
           Console.Write(" ");
       }
       else
           Console.Write(inp[j] + " ");
    }
}

输出:

enter image description here

样本:

dotNetFiddle