字符串的顺序相反

时间:2014-01-16 12:21:11

标签: c# .net string

我需要创建一个程序来读取一行文本,其中单词由空格和标点符号分隔,并以相反的顺序显示。文本行也可以包含数字,但如果是,则显示的反向文本必须包含带有单词

的文本

问题是,指令说我只能使用.net库中的基本函数,并且使用复杂的函数,例如 - 排序,搜索字符和类似的东西是严格禁止的。这意味着.Contains是不允许的。 some1请帮助我,如何使用基本功能编写?

示例 Galaxy Omega123,由于其偏僻而应变紫色! --->遥远!它到了应有的颜色,紫色菌株银河

string reverseString = "";
        for (int j = separatedLine.Length -1; j >= 0; j--)
        {
            if (separatedLine[j].Contains('0') || separatedLine[j].Contains('1') || separatedLine[j].Contains('2') || separatedLine[j].Contains('3') || separatedLine[j].Contains('4') || separatedLine[j].Contains('5') || separatedLine[j].Contains('6') || separatedLine[j].Contains('7') || separatedLine[j].Contains('8') || separatedLine[j].Contains('9'))
            {
                separatedLine[j] = "";
            }
            else
            {
                reverseString = reverseString + separatedLine[j];
            }
        }
        return reverseString;

2 个答案:

答案 0 :(得分:1)

很抱歉,我无法抗拒在这里使用LINQ,尽管问题只是基本的.NET方法。因此,我感觉不像做别人的作业。对于那些关注这个问题的人来说,它仍然有用。

string text = "Here is 1234 number";
string output = string.Join(" ", text.Split(' ')
                                     .Select(s => s.Any(c => Char.IsDigit(c)) 
                                                    ? s : new string(s.Reverse().ToArray())));
// output is "ereH si 1234 rebmun"

答案 1 :(得分:0)

典型的解决方案是拆分加入反向部分:

  // Put all possible separators into array
  String[] parts = separatedLine.Split(new Char[] {' ', ',', ';'});
  // "," is a separator to use
  return String.Join(",", parts.Reverse());

e.g。如果

  separatedLine = "1 2;3,4"; the outcome is "4,3,2,1"

如果您在使用Split,Linq等方面有所帮助,解决方案可能就是 一种仿真

  List<String> parts = new List<String>();
  StringBuilder part = new StringBuilder();

  foreach(Char ch in separatedLine) 
    // Put all possible separators into condition
    if ((ch == ' ') || (ch == ',') || (ch == ';')) {
      parts.Add(part);
      parts.Length = 0;
    }
    else 
      part.Add(ch);  

  parts.Add(part); // <- Do not forget to add the last one   

  StringBuilder result = new StringBuilder();

  for (int i = parts.Count - 1; i >= 0; --i) {
    if (i < parts.Count - 1)
      result.Add(','); // <- Separator to use

    result.Add(parts[i]);
  }

  return result.ToString();