Как получить n-е слово из строки, если между словами больше пробелов? - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь распечатать x-е слово из предложения, подобного этому:

string phrase = Console.ReadLine();
int wordIndex = Convert.ToInt32(Console.ReadLine());
string currentWord = "";
int currentWordIndex = 1;

for (int i = 0;  i < phrase.Length; i++)
{
if (phrase[i] != ' ')
    currentWord += phrase[i];

if (phrase[i] == ' ' || i == phrase.Length - 1)
{
    if (wordIndex == currentWordIndex)
    {
        Console.WriteLine(currentWord);
        break;
    }

    currentWord = "";

    if (i != phrase.Length - 1)
        currentWordIndex++;
 }

}

if (wordIndex > currentWordIndex)
Console.WriteLine("N/A");

Я хочу, чтобы оно работало, даже если между словами больше пробелов.Любая помощь, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 05 октября 2018
using System;
using System.Linq; // !! important

public class Program
{
    public static void Main()
    {
        string phrase = Console.ReadLine();
        int wordIndex = Convert.ToInt32(Console.ReadLine());
        var result = phrase.Split(new []{' '}, StringSplitOptions.RemoveEmptyEntries)
            .Skip(wordIndex - 1)
            .FirstOrDefault(); 
        Console.WriteLine(result ?? "N/A");
    }
}

вывод:

>hello, this is a test
>3
is

Другая опция, тот же результат

var result = phrase.Split()
    .Where(x => !string.IsNullOrWhiteSpace(x))
    .Skip(wordIndex - 1)
    .FirstOrDefault(); 
0 голосов
/ 05 октября 2018

Вы можете просто убрать двойные пробелы: while (phrase.IndexOf(" ") != -1) phrase = phrase.Replace(" ", " ");.Цикл while необходим в случае 4+ пробелов между словами.Решение с Split и RemoveEmptyEntries лучше, мой ответ - еще одно решение.

0 голосов
/ 05 октября 2018
string[] splited = phrase.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
string nth = splited.Length >= n ? splited[n-1] : "N/A";
Console.WriteLine(nth);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...