这是我的代码。如何编辑它以显示仅奇数位置的每个单词都被反转?
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奇数索引]反转
答案 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);
中,将其变回普通字符串而不是项目数组。
答案 1 :(得分:4)
到目前为止,您有一个string
,如下所示:
string input = "I want to reverse all odd words (odd words only!).";
当然,你想要完成任务。现在问题是奇数这个词的主要问题是什么?
如果您的意思是单词的位置(位置I
0
,want
的{{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);
的字词,即Length
,I
,all
,那么您所要做的就是将条件更改为
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] + " ");
}
}
输出:
样本: