Я новичок в C# и знаю только основы. Я ищу пример кода о том, как получить каждое второе слово из строковой переменной. Например, если переменная была

String x = "Help me, coding is difficult"; 

Я хотел бы вернуть одну строку «Помощь в кодировании». Это должна быть функция, которая принимает одну строку и возвращает ее отфильтрованную версию.

Кто-то предложил дубликаты, которые я в основном уже видел во время своего исследования:

  • Как разбить текст на слова? показывает очень сложную логику, учитывающую пунктуацию Например. Я думаю, что я могу просто полагаться на пробелы, но если у вас есть лучшее предложение с объяснением - было бы неплохо.
  • Выбрать каждый второй элемент из массива с помощью лямбда - кажется многообещающим, но пример показывает, как работать с целочисленным массивом. У меня есть строка (или, может быть, массив строк, если можно адаптировать код разделения строк для его предоставления).
  • С# Распечатать список массива строк, что также звучит многообещающе, но показывает, как чтобы напечатать результат, а не как вернуть его как значение из функции.
2
Sean Normandale 4 Фев 2022 в 00:21
Как определить границу между словами? Если бы me, было первым словом, вы бы поставили или исключили запятую?
 – 
gunr2171
4 Фев 2022 в 00:25
Желательно исключить запятую, которую, я думаю, можно сделать с помощью .split, если я не ошибаюсь?
 – 
Sean Normandale
4 Фев 2022 в 00:27
1
Если вы не можете ограничить текст каким-либо известным способом или вас не устраивает множество ошибок в пограничных случаях, вы находитесь не на той стороне этого комикса: xkcd.com/1425 и то, что вы просите, является эквивалентом полнофункционального процессора естественного языка.
 – 
Joel Coehoorn
4 Фев 2022 в 00:30
Что насчет пунктуации? Или апострофы? Или дефисы? "Что считается словом?" сложно описать, если только вы не делать «место - единственное, что имеет значение».
 – 
gunr2171
4 Фев 2022 в 00:32
1
Если вы просто хотите убрать знаки препинания и разделить на пробелы, тогда да string.Split - это правильное направление, за которым следует что-то вроде цикла for. Мы можем ответить на такие вопросы, но я думаю, что вам лучше сначала изучить некоторые учебные пособия, а после попытки реализации задать их здесь.
 – 
Andrew Williamson
4 Фев 2022 в 00:39

3 ответа

Лучший ответ

Предполагая, что вы считаете слово «каждым символом между пробелами или началом/концом строки», и вы не пытаетесь удалить какие-либо буквы.

var input = "Help me, coding is difficult";
var everyOther = input
    .Split(' ')
    .Where((x, i) => i % 2 == 0);
Console.WriteLine(string.Join(" ", everyOther));

Код для Where был взят из этот пост.

Идея состоит в том, чтобы использовать перегрузку Where, которая дает вам значение индекса, и посмотреть, является ли это значение индекса четным, если да, включить его в результаты.

1
gunr2171 4 Фев 2022 в 00:47
Это блестяще и именно то, что я искал. Спасибо за помощь! Могу ли я где-нибудь написать вам, чтобы задать вопрос и кое-что уточнить? @gunr2171
 – 
Sean Normandale
4 Фев 2022 в 01:13
Комментарии здесь в порядке. Дает каждому возможность высказаться.
 – 
gunr2171
4 Фев 2022 в 01:15
Поскольку я новичок в С# и кодировании в целом... можете ли вы разбить ".Where((x, i) => i % 2 == 0);" так что я лучше понимаю, как это работает и что он делает?
 – 
Sean Normandale
4 Фев 2022 в 01:16
1
А, хорошо. Здесь есть несколько тем. Линк. Лямбды. Модульное деление. Эти три термина должны дать вам отправную точку.
 – 
gunr2171
4 Фев 2022 в 01:20
string s = "You win some. You lose some.";

string[] subs = s.Split(' ');

for(int i=0 ; i < subs.length ; i+=2)
{
    Console.WriteLine($"Substring: {sub[i]}");
}
0
Amjad Saab 4 Фев 2022 в 00:41

Я бы предпочел разделение с регулярным выражением

-3
Marcus Runge 4 Фев 2022 в 00:34
И..... как вы бы это сделали?
 – 
gunr2171
4 Фев 2022 в 00:35