我创建了一个分割函数:句子中的每个单词都作为元素添加到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());
}
}
结果将如下所示(visual result here)
Hello
world!
答案 0 :(得分:2)
退出while
循环后,需要手动将剩余字符添加为数组中的最后一个条目。这是因为你拆分了字符(空格),但最后一个字后面没有空格来表示要添加的单词:
...
}
if (!string.IsNullOrEmpty(buff))
sent[count++] = buff;
但是,正如@Matthew
指出的那样,除非你需要实现一些特殊功能,否则你应该只使用内置的分割功能:
"Hello World!".Split(' ');
这在一行代码中开箱即用,并且已经由.NET Framework的开发人员和无数用户进行了详尽的测试。
答案 1 :(得分:0)
if (str[i] == ' ')
永远不会为最后一个词开火
while (i < str.Length)
{
if (str[i] == ' ')
{
sent[count] = buff;
count++;
buff = "";
}
else
{
buff += str[i];
}
i++;
}
sent[count] = buff;
答案 2 :(得分: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]);
}
答案 3 :(得分:0)
为什么不是这样的?
private Array SplitSentence(string splitMe)
{
if(string.IsNullOrEmpty(splitMe)) return null;
var splitResult = splitMe.Split(" ".ToArray());
return splitResult;
}
答案 4 :(得分: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);
}