شمارش تعداد کلمات در سی شارپ #C

ما یک جمله ی بلند را در یک Textbox در سی شارپ قرار داده ایم و می خواهیم تعداد کلمات آن را بشماریم ، کدی که در زیر مشاهده می کنید فقط درصورتی که یک خط باشد کار می کند. چگونه می توانیم این کار را بدون اتکا به regex یا عملکردهای خاص دیگر انجام دهیم ؟

string whole_text = richTextBox1.Text;
string trimmed_text = whole_text.Trim();
string[] split_text = trimmed_text.Split(' ');
int space_count = 0;
string new_text = "";

foreach(string av in split_text)
{
    if (av == "")
    {
        space_count++;
    }
    else 
    { 
        new_text = new_text  + av + ",";
    }
}

new_text = new_text.TrimEnd(',');
split_text = new_text.Split(',');
MessageBox.Show(split_text.Length.ToString ());

روش اول

برای شمارش کلمات در سی شارپ روش های مختلفی وجود دارد . به طور ساده با یک حلقه می توان جملات را خواند و هرکجا که به فضای خالی space رسید آن را یک کلمه در نظر گرفت . اما روش های بهتری نیز وجود دارند به طور مثال String.Split که به طور خودکار تعداد (به طور بالقوه) زیادی اشیا String را محاسبه می کند . همچنین یک نکته مهمتر اینکه اگر متن شما در textbox مدام تغییر کند،باید این محاسبه را در یک کنترل کننده رویداد انجام دهید تا از تکرار ساده دستی شمارش کاراکترها راحت شوید . می توانید از الگوریتمی مشابه این استفاده کنید:

پلتفرم بوی اجرا شدن خروجی صحیح قطعه کد زیر را تایید می کند
قطعه کدی که در زیر مشاهده می کنید توسط برنامه کامپایلر به جهت تست آزمایش شده و خروجی صحیح مدنظر را بدست آورد.
int wordCount = 0, index = 0;

// skip whitespace until first word
while (index < text.Length && char.IsWhiteSpace(text[index]))
    index++;

while (index < text.Length)
{
    // check if current char is part of a word
    while (index < text.Length && !char.IsWhiteSpace(text[index]))
        index++;

    wordCount++;

    // skip whitespace until next word
    while (index < text.Length && char.IsWhiteSpace(text[index]))
        index++;
}

روش دوم

ابتدا متن را از پرونده دریافت کنید. رشته ها را از فضاهای خالی تقسیم کنید -> هر کلمه را به لیست رشته های جدید اضافه کنید -> شمارش اولیه را ۰ قرار دهید و هر بار آرایه ۱ را برای شمارش یک مقدار اضافه کنید [i] خالی نیست.

   static void Main(string[] args)
    {
        var path = @"C:\Users\Saurav Shrestha\Desktop\C_sharp\FileInfoPractice.txt";
        var content = File.ReadAllText(path);

        Console.WriteLine(content);

        var words = content.Split(' ');

        var array = new List<string>();
        foreach (var word in words)
            array.Add(word);

        int count = 0;
        for (int i = 0; i < array.Count; i++)
        {
            if (array[i] != null)
                count += 1;
        }
        Console.WriteLine("Number of Words in the File: {0}", count);
    }
}

روش سوم

می توانید از قطعه کد زیر برای گرفتن تعداد کلمات در یک رشته استفاده کنید. فقط توجه داشته باشید فاصله های دوتایی باعث بهم ریختن تعداد می شوند.

public static int CountWords(this string line)
   {
       var wordCount = 0;
       for (var i = 0; i < line.Length; i++)
           if (line[i] == ' ' || i == line.Length - 1)
               wordCount++;
       return wordCount;
   }

روش چهارم

 static void Main(string[] args)
   {
       string str;
       int i, wrd, l;
       StringBuilder sb = new StringBuilder();

       Console.Write("\n\nCount the total number of words in a string 
       :\n");
       Console.Write("--------------------------------------------------- 
       ---\n");
       Console.Write("Input the string : ");
       str = Console.ReadLine();

       l = 0;
       wrd = 1;

       foreach (var a in str)
       {
           sb.Append(a);
           if (str[l] == ' ' || str[l] == '\n' || str[l] == '\t')
           {
               wrd++;
           }
           l++;
       }

       Console.WriteLine(sb.Replace(' ', '\n'));
       Console.Write("Total number of words in the string is : {0}\n", 
       wrd);
       Console.ReadLine();
}

روش پنجم

public static int WordCount(string str)
{        
    int num=0;
    bool wasInaWord=true;;

    if (string.IsNullOrEmpty(str))
    {
        return num;
    }

    for (int i=0;i< str.Length;i++)
    {
        if (i!=0)
        {
            if (str[i]==' ' && str[i-1]!=' ')
            {
                num++;
                wasInaWord=false;
            }
        } 
            if (str[i]!=' ')
            {
                wasInaWord=true;                
            }
    }
    if (wasInaWord)
    {
        num++;
    }
    return num;
}

روش ششم

public static int CountWords(string test)
{
  int count = 0;
  bool inWord = false;

  foreach (char t in test)
  {
    if (char.IsWhiteSpace(t))
    {
      inWord = false;
    }
    else
    {
      if (!inWord) count++;
      inWord = true;
    }
  }
  return count;
}

روش هفتم

char[] delimiters = new char[] {' ', '\r', '\n' };
whole_text.Split(delimiters,StringSplitOptions.RemoveEmptyEntries).Length;

روش هشتم

روش های بهتری برای انجام این کار وجود دارد ، اما اگر همچنان جواب نگرفته اید موارد زیر را امتحان کنید:

string whole_text = richTextBox1.Text;
string trimmed_text = whole_text.Trim();

// new line split here
string[] lines = trimmed_text.Split(Environment.NewLine.ToCharArray());

// don't need this here now...            
//string[] split_text = trimmed_text.Split(' ');

int space_count = 0;
string new_text = "";

حالا دو حلقه foreach درست کنید. یکی برای هر سطر و دیگری برای شمارش کلمات درون سطرها.

foreach (string line in lines)
{
    // Modify the inner foreach to do the split on ' ' here
    // instead of split_text
    foreach (string av in line.Split(' '))
    {
        if (av == "")
        {
            space_count++;
        }
        else
        {
            new_text = new_text + av + ",";
        }
    }
}

new_text = new_text.TrimEnd(',');

// use lines here instead of split_text
lines = new_text.Split(',');
MessageBox.Show(lines.Length.ToString());
}

 

آیا این نوشته برای شما مفید بود ؟

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *