2015-02-09 2 views
-1

1) Мне нужно подсчитать, сколько слов у меня есть в предложении.Количество слов и извлечения чисел из строки и их сумма

Но что делать, если у меня есть более одного пробела? Это будет считаться словом. Нужно решение для этого.

There is four words./count as 4 words 
There is four words./count as 5 words 

Я использую:

int countWords = txt.Split().Length; 

2) Мне нужно извлечь числа из строки, а затем получить сумму. Мой код не работает, нет перегрузки для ошибки метода.

Весь мой код:

  Console.Write("Ievadiet tekstu: "); 
      string txt = Console.ReadLine(); 
      int sum = 0; 


      int countWords = txt.Split().Length; 

      foreach (char num in txt) 
      { 
       if (char.IsDigit(num)) 
        sum += Int32.TryParse(num).ToString(); 
      } 

      Console.WriteLine("There are {0} words in this sentence.",countWords); 
      Console.WriteLine("Summ is "+sum); 
+1

[Документация] (https://msdn.microsoft.com/en-us/library/ms131448%28v=vs.110%29.aspx) имеет пример, который делает эту точную вещь - См. Примечания – Sayse

+1

[ StringSplitOptions.RemoveEmptyEntries] (https://msdn.microsoft.com/en-us/library/system.stringsplitoptions%28v=vs.110%29.aspx) поможет. –

+0

Вы хотите суммировать «слова», которые могут быть проанализированы на 'int'? Затем сделайте это, используйте 'int.TryParse' для всех слов, которые были извлечены с помощью' text.Split (new char [] {}, StringSplitOptions.RemoveEmptyEntries) '. –

ответ

2

Используйте перегрузку String.Split с StringSplitOptions.RemoveEmptyEntries. Вы можете использовать пустой char[] (или string[]), чтобы получить то же поведение, что и String.Split, без аргумента, так что он разбивается на все white-space characters как на символы пробела, табуляции или новые строки.

Если вы хотите суммировать «слова», которые могут быть проанализированы на int, тогда сделайте это, используйте int.TryParse на все слова, которые были извлечены String.Split. Вы можете использовать LINQ:

string[] words = text.Split(new char[] {}, StringSplitOptions.RemoveEmptyEntries); 
int wordCount = words.Length; 
int num = 0; 
int sum = words.Where(w => int.TryParse(w, out num)).Sum(w => num); 
+0

Можете ли вы сказать мне, есть ли способ переписать этот код? int wordCount = text.Split (новый char [] {''}, StringSplitOptions.RemoveEmptyEntries) .Length; Есть ли способ подсчитать слова с FOR или FOREACH? – naathanz

0

Это простое консольное приложение, чтобы делать то, что вы намереваетесь сделать. Он использует регулярное выражение для записи числовых символов и суммирует их. TryParse просто отказоустойчивый (я считаю, что в этом случае он не нужен, так как регулярное выражение обеспечивает захват только цифр).

static void Main(string[] args) 
    { 
     Regex digitRegex = new Regex("(\\d)"); 
     string text = Console.ReadLine(); 

     int wordCount = text.Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries).Length; 
     int sum = 0; 
     foreach (Match x in digitRegex.Matches(text, 0)) 
     { 
      int num; 
      if (int.TryParse(x.Value, out num)) 
       sum += num; 
     } 

     Console.WriteLine("Word Count:{0}, Digits Total:{1}", wordCount, sum); 
     Console.ReadLine(); 
    } 

Надеюсь, это поможет. Cheers

+0

Можете ли вы сказать мне, есть ли способ переписать этот код? int wordCount = text.Split (новый char [] {''}, StringSplitOptions.RemoveEmptyEntries) .Length; Есть ли способ подсчитать слова с FOR или FOREACH? – naathanz

+0

Всегда есть путь к тому, что вы хотите сделать. Но вы должны спросить себя, нужен ли вам этот путь. В настоящее время у вас есть готовые решения для вашей проблемы. Вы действительно хотите попробовать и пойти так? Можете ли вы сделать лучшее решение, чем тот, который уже предоставлен? Учитывая, что подумайте, действительно ли вам это нужно. Если вы хотите просто сделать это для удовольствия, вы всегда можете перебирать каждый символ в строке и выполнять необходимые проверки для каждого из них. Но это не очень экономично. – Ninglin

Смежные вопросы