c# - توابع شمارش

draria

Member
کلاسی با نام text manager که شامل متدهای زیر باشد
wordcount برای شمارش تعداد کلمات رشته ( wname)
space count تعداد space ها را می شمارد(sname)
paragraphcount تعداد پاراگرافهای متن را می شمارد (lname )
list word کلمات موجود در متن را به ترتیب از a تا z مرتب و چاپ می کند (lname )
 

the_king

مدیرکل انجمن
کلاسی با نام text manager که شامل متدهای زیر باشد
wordcount برای شمارش تعداد کلمات رشته ( wname)
space count تعداد space ها را می شمارد(sname)
paragraphcount تعداد پاراگرافهای متن را می شمارد (lname )
list word کلمات موجود در متن را به ترتیب از a تا z مرتب و چاپ می کند (lname )

کد:
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication16
{
    class Program
    {
        class textmanager
        {
            public int wordcount(string wname)
            {
                int index, count = 0;
                bool newword = true;
                for (index = 0; index < wname.Length; index++)
                    switch (wname[index])
                    {
                        case ' ':
                        case ',':
                        case '.':
                        case ':':
                        case ';':
                        case '?':
                            newword = true;
                            break;
                        default:
                            if (((wname[index] >= 'a') && (wname[index] <= 'z'))
                                || ((wname[index] >= 'A') && (wname[index] <= 'Z')))
                                if (newword == true)
                                {
                                    newword = false;
                                    count++;
                                }
                            break;
                    }
                return count;
            }

            public int spacecount(string sname)
            {
                int index, count = 0;
                for (index = 0; index < sname.Length; index++)
                    if (sname[index] == ' ')
                        count++;
                return count;
            }

            public int paragraphcount(string lname)
            {
                int index, count = 0;
                bool newline = true;
                for (index = 0; index < lname.Length; index++)
                    if (lname[index] == '\n')
                        newline = true;
                    else
                        if (newline == true)
                        {
                            count++;
                            newline = false;
                        }
                return count;
            }

            public void listword(string lname)
            {
                int index, count = 0, start = 0, i, j;
                string[] words = new string[lname.Length + 1];
                string temp;
                bool newword = true;
                for (index = 0; index < lname.Length; index++)
                    switch (lname[index])
                    {
                        case ' ':
                        case ',':
                        case '.':
                        case ':':
                        case ';':
                        case '?':
                            if (newword == false)
                            {
                                newword = true;
                                words[count - 1] = lname.Substring(start, index - start);
                            }
                            break;
                        default:
                            if (((lname[index] >= 'a') && (lname[index] <= 'z'))
                                || ((lname[index] >= 'A') && (lname[index] <= 'Z')))
                                if (newword == true)
                                {
                                    newword = false;
                                    start = index;
                                    count++;
                                }
                            break;
                    }
                if (newword == false)
                    words[count - 1] = lname.Substring(start, index - start);
                for (i = 2; i < count; i++)
                    for (j = 0; j < count - i; j++)
                        if (words[j].CompareTo(words[j + 1]) > 0)
                        {
                            temp = words[j];
                            words[j] = words[j + 1];
                            words[j + 1] = temp;
                        }
                for (i = 0; i < count; i++)
                    Console.WriteLine(words[i]);
            }
        }
        static void Main(string[] args)
        {
            textmanager t = new textmanager();
            Console.WriteLine(t.wordcount("This is a test"));
            Console.WriteLine(t.spacecount("This is a test"));
            Console.WriteLine(t.paragraphcount("Paragraph #1\nParagraph #2"));
            t.listword("This is a test");
            Console.ReadKey(true);
        }
    }
}
 

draria

Member
من با کمک برنامه شما به صورت کمی ساده تر برنامه بالا رو با موارد زیر انجام دادم

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


using system;
using system.collections.generic;
using system.text;

namespace windowsapplication8
{
class textprocessor
{
string text;
public void wordcounter()
{
int counter = 0;
for (int i = 0; i < text.length; i++)
{
if (text == ' ')
counter = counter + 1;
}
}
public void paragrafcounter()
{
int conter1 = 0;
for (int i = 0; i < text.length; i++)
{
if (text == '\n')
conter1 = conter1 + 1;

}
}

static void main(string[] args)
{

console.writeline(("this is a test"));
console.writeline(("this is a test"));
console.readkey(true);
}
}
}
 

draria

Member
میشه همین رو بدون چیزهای سخت مثل اینا بنویسی
switch (wname[index])
{
case ' ':
case ',':
case '.':
case ':':
case ';':
case '?':
newword = true;
break;
default:
if (((wname[index] >= 'a') && (wname[index] <= 'z'))
|| ((wname[index] >= 'A') && (wname[index] <= 'Z')))
if (newword == true)
{
 

the_king

مدیرکل انجمن
میشه همین رو بدون چیزهای سخت مثل اینا بنویسی
switch (wname[index])
{
case ' ':
case ',':
case '.':
case ':':
case ';':
case '?':
newword = true;
break;
default:
if (((wname[index] >= 'a') && (wname[index] <= 'z'))
|| ((wname[index] >= 'A') && (wname[index] <= 'Z')))
if (newword == true)
{

چطوری انتظار دارین که بتوانم بدون if و case کلمات را تفکیک کنم؟ فرض کنید که رشته ورودی
"Note:what are \"BASE\" colors? ---===--- red,green and blue" باشد، تعداد کلمات این متن 9 کلمه است :

کلمه 1) Note
کلمه 2) what
کلمه 3) are
کلمه 4) BASE
کلمه 5) colors
کلمه 6) red
کلمه 7) green
کلمه 8) and
کلمه 9) blue

شما بین کلمات چه حروفی می بینید آنها را از هم تشخیص بدهید؟ حروفی مانند : و , و ? و فاصله.
اینها همان حروفی هستند که در case از آنها نام برده ام.

برای تشخیص شروع کلمات چه؟ مثلا کاراکتر های ---===--- جزو کلمات نیستند و تا زمانی که به حرف r در کلمه red نمی رسیم
کلمه جدیدی آغاز نشده است. پس هنگامی یک کلمه آغاز می شود که حروف a الی z یا A الی Z باشد. این همان شرطی
است که در if ها نوشته ام.

اگر این case ها و if ها را حذف کنم، کلمات را می توان از هم تفکیک کرد؟

می توان بجای کد زیر :
کد:
                    switch (wname[index])
                    {
                        case ' ':
                        case ',':
                        case '.':
                        case ':':
                        case ';':
                        case '?':
از کد زیر استفاده کرد :
کد:
                    if (" ,.:;?".IndexOf(wname[index]) >= 0)

و بجای کد زیر
کد:
                            if (((wname[index] >= 'a') && (wname[index] <= 'z'))
                                || ((wname[index] >= 'A') && (wname[index] <= 'Z')))
می توان از کد زیر استفاده کرد :
کد:
                            if ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".IndexOf(wname[index]) >= 0)

اما گمان نمی کنم این تغییر درک مساله را ساده تر کند.

کد:
            public int wordcount(string wname)
            {
                int index, count = 0;
                bool newword = true;
                for (index = 0; index < wname.Length; index++)
                    if (" ,.:;?".IndexOf(wname[index]) >= 0)
                            newword = true;
                    else
                        if ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".IndexOf(wname[index]) >= 0)
                            if (newword == true)
                            {
                                newword = false;
                                count++;
                            }
                return count;
            }

شرط ها همانند که بودند. صرفا نحوه بیان متفاوتی دارند.
 

draria

Member
سپاس و درود
یه مورد هست که می خوام متنی که بهش داریم رو هم برعکس چاپ کنه یعنی this is a test بشه tset a si siht
بعد متنمون رو تبدیل به * کنه
بعد بگه از هر کلمه چند بار استفاده کردیم مثلا a 2 دوبار
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا