1

我创建了一个拆分函数:句子中的每个单词都作为一个元素添加到string数组中。

我对最后一个词有疑问;它没有被添加到输出数组中:

编码:

// the funcion
static void splits(string str)
{
   int i=0;
   int count=0;
   string[] sent = new string[2];
   string buff= "";
   while (i < str.Length)
   {
      if (str[i] == ' ')
      {
         sent[count] = buff;
         count++;
         buff = "";
      }
      buff += str[i];
      i++;
   }
     Console.WriteLine(sent[0]);
}

// When used
splits("Hello world!");

-----------------------------------------------------------


我找到了解决方案,很简单
,希望每个人都能受益

static void splits(string str)
{
  int i = 0;
  int count = 0;
  string[] sent = new string[2];
  string buff = "";
  str += " ";         // the solution here, add space after last word
  while (i < str.Length)
  {
    if (str[i] == ' ')
    {
       sent[count] = buff;
       count++;
       buff = "";
    }
    buff += str[i];
    i++;
  }

  for (int z = 0; z < sent.Length; z++)
  {
     Console.WriteLine(sent[z].Trim());
  }
}

结果将如下所示(此处为视觉结果

Hello  
world!
4

5 回答 5

2

退出while循环后,您需要手动添加剩余字符作为数组中的最后一项。这是因为您在字符(空格)上进行了拆分,但最后一个单词后面没有空格来表示要添加的单词:

...
}
if (!string.IsNullOrEmpty(buff))
    sent[count++] = buff;

示例:http: //ideone.com/81Aw1


但是,正如所@Matthew指出的,除非您需要实现一些特殊功能,否则您应该只使用内置的 split 功能:

"Hello World!".Split(' ');

这在一行代码中开箱即用,并且已经过 .NET Framework 的开发人员和无数用户的详尽测试。

于 2012-04-09T15:13:15.413 回答
0

为了使解决方案可重复使用,我首先计算了空格数;我还将最后一个单词作为一种特殊情况处理(因此,这使得这项工作与不包含空格的输入一起工作)。它应该很容易适应任何分隔符。

  string s = "Test spaces in a sentence :)";
  int numSpaces = 1;
  foreach (char c in s)
  {
    if (c == ' ')
    {
      ++numSpaces;
    }
  }
  string[] output = new string[numSpaces];
  int spaceIndex = s.IndexOf(' ');
  int index = 0;
  int startIndex = 0;
  --numSpaces;
  while (index < numSpaces)
  {
    output[index] = s.Substring(startIndex, spaceIndex - startIndex);
    startIndex = spaceIndex + 1;
    spaceIndex = s.IndexOf(' ', startIndex);
    ++index;
  }
  output[index] = s.Substring(startIndex);
  foreach (string str in output)
  {
    Console.WriteLine(str);
  }
于 2012-04-09T16:25:49.557 回答
0
if (str[i] == ' ')

绝不会因为最后一句话而开火

while (i < str.Length)
{
   if (str[i] == ' ')
   {
      sent[count] = buff;
      count++;
      buff = "";
   }
   else
   {
       buff += str[i];
   }

   i++;
}
sent[count] = buff;
于 2012-04-09T15:13:36.500 回答
0

完成 while 循环后,您需要检查缓冲区,以确定最后一个单词是否仍在其中。此外,您只打印第一个元素。

// the funcion
static void splits(string str)
{
   int i=0;
   int count=0;
   string[] sent = new string[2];
   string buff= "";
   while (i < str.Length)
   {
      if (str[i] == ' ')
      {
         sent[count] = buff;
         count++;
         buff = "";
      }
      buff += str[i];
      i++;
   }
   if (buff.Length > 0) {
       sent[count] = buff;
       count++;
   }

   for (i = 0; i < count; i++)
       Console.WriteLine(sent[i]);
}
于 2012-04-09T15:15:48.910 回答
0

为什么不这样呢?

 private Array SplitSentence(string splitMe)
 {
   if(string.IsNullOrEmpty(splitMe)) return null;
   var splitResult = splitMe.Split(" ".ToArray());
   return splitResult;
 }
于 2012-04-09T15:20:18.917 回答