使用IndexOf分隔句子的单词

时间:2014-04-28 01:51:54

标签: c# indexof

我正在尝试在C#控制台中编写一个程序,基本上让用户输入一个句子,每个单词用逗号分隔,然后它将在控制台上显示每个单独的单词。这是我想要做的一个例子。

  

请输入以逗号分隔的句子:
  你好,我的名字,是,约翰

然后输出看起来像这样

Hello, my, name, is, john
my, name, is, john
name, is, john
is, john
john

这是一项家庭作业,但课程在这一天被取消,所以我们从来没有上过这个课程。

根据我的阅读,你必须使用方法的索引,但到目前为止它只是打印索引号而不是实际的单词。这是我到目前为止所得到的,它非常裸露,但我刚刚开始。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Chapter_16_Sample_1
{
    class Program
    {
        static void Main(string[] args)
        {
            string sentence;


            Console.WriteLine("Please enter four words seperated by a comma");
            sentence = Console.ReadLine();

            int first = sentence.IndexOf(",");

            Console.WriteLine("{0}", first);
            Console.ReadLine();
        }
    }
}

就像我说它确实给出了我的第一个逗号的正确索引号,但是如果我能弄清楚如何取出整个单词,我想我可以想出这个作业。

2 个答案:

答案 0 :(得分:0)

您将获得第一次出现逗号的索引,然后在控制台中显示它。

您需要String.Substring方法从用户输入中获取子字符串。Substring方法将index作为参数,然后返回从该索引开始直到字符串结尾的子字符串,除非您提供{ {3}}参数。

例如,此代码将在控制台中显示, John

string input = "Hello, John";
int index = input.IndexOf(',');
Console.WriteLine(input.Substring(index));

正如您所看到的,它还包括起始索引处的字符(在这种情况下为逗号,为了避免这种情况,您可以使用input.Substring(index + 1)代替input.Substring(index)

现在,如果我们返回您的问题,您可以使用while循环,然后获取子字符串,从第一个逗号开始,显示它并在每次迭代时更新userInput的值。还有使用变量来保存字符串中第一个逗号的index,所以当它变为-1时,你会知道你的字符串中不存在逗号,然后你打破循环并显示最后一个部分:

string userInput = Console.ReadLine();
int index = userInput.IndexOf(','); // get the index of first comma

while (index != -1) // keep going until there is no comma
{
    // display the current value of userInput
    Console.WriteLine(userInput); 

    // update the value of userInput
    userInput = userInput.Substring(index + 1).Trim(); 

    // update the value of index
    index = userInput.IndexOf(',');
}
Console.WriteLine(userInput); // display the last part

注意:我还使用count方法从userInput中删除了尾随空格。

答案 1 :(得分:0)

你可以这样做:

  • 阅读句子。
  • idx变量将保留IndexOf检索到的最后一个逗号的位置。您可以使用IndexOf的重载来指定搜索下一个逗号的起始索引。当 IndexOf无法找到值时会返回-1,这是停止循环的条件。
  • 最后一步是使用方法Substring打印从位置idx+1到字符串末尾的子字符串。

代码是这样的。 请尝试理解它,如果你只是复制粘贴,你就不会学到任何东西。

Console.WriteLine("Please enter four words separated by a comma");

string sentence = Console.ReadLine();

Console.WriteLine(sentence);

int idx = -1;

while (true)
{
    idx = sentence.IndexOf(',', idx + 1);
    if (idx == -1) break;
    Console.WriteLine(sentence.Substring(idx + 1));
}