2017-02-08 3 views
-2

Я пытаюсь подсчитать слова в этой программе, но я не понимаю, почему программа рассчитывает на 1 число меньше, чем должно быть.C# cant понять count

Например:

солнце жарко

программа покажет мне, что есть только два слова.

Console.WriteLine("enter your text here"); 
string text = Convert.ToString(Console.ReadLine()); 
int count = 0; 
text = text.Trim(); 
for (int i = 0; i < text.Length - 1; i++) 
{ 
    if (text[i] == 32) 
    { 
     if (text[i + 1] != 32) 
     { 
      count++; 
     } 
    } 
} 
Console.WriteLine(count); 
+3

Вы считаете только пробелы. – DavidG

+0

Вы пробовали отлаживать? –

+1

Вам может быть интересен метод 'string.Split'. – juharr

ответ

1
if (text[i] == 32) 

Вы считая пробелы, а не слова

Вот лучшее решение с использованием MatchCollection

using System.Text.RegularExpressions; 

namespace StackOverCSharp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("enter your text here"); 
      string text = Convert.ToString(Console.ReadLine()); 
      MatchCollection collection = Regex.Matches(text, @"[\S]+"); 

      Console.WriteLine(collection.Count); 
     } 
    } 
} 
2

Регулярное выражение работает лучше для этого.

var str = "this,is:my test string!with(difffent?.seperators"; 
int count = Regex.Matches(str, @"[\w]+").Count; 

результат 8. Графы все слова, не включает в себя пробелы или специальные символы, независимо от того, что они повторяют или нет.

+0

Это правильное решение (+1), если слово «буквенно-цифровые символы между не-альфа-числовыми». Однако (просто академическое замечание) слово в * естественных языках * (английский, русский и т. Д.) - очень сложная вещь: «не может» - одно слово, «не может» - два; «забыть-нет-нет» - один, «не забывай меня» - четыре и т. д. –