PDA

View Full Version : سوال: توابع شمارش در c#



ariashop
سه شنبه 10 دی 1387, 21:43 عصر
کلاسی با نام 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);
}
}
}



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

ahmadsystemco
سه شنبه 10 دی 1387, 22:04 عصر
سلام
اميدوارم از جواب قبليم زياد ناراحت نشده باشي

اين يك متد ساده براي بر عكس كردن متن كه اسمش رو خودت انتخاب كن و در كلاست قرار بده


private string maghloob(string text)
{
string output = "";
for (int i = (text.Length-1); i > 0; i--)
{
output+=text[i];
}
return output;
}

ariashop
سه شنبه 10 دی 1387, 22:23 عصر
private string maghloob(string text)
{
string output = "";
for (int i = (text.Length-1); i > 0; i--)
{
output+=text[i];
}
return output;
}


ممنون می خوام output رو اونجا نگیره بعد بیام پایین تو تابع mainam خودم بهش متن بدم دیگه اینجوری output+=text[i]; این هم عوض میشه
حالا چرا حتما باید private تعریف کنیم ؟

ahmadsystemco
پنج شنبه 19 دی 1387, 10:57 صبح
ممنون می خوام output رو اونجا نگیره بعد بیام پایین تو تابع mainam خودم بهش متن بدم دیگه اینجوری output+=text[i]; این هم عوض میشه
حالا چرا حتما باید private تعریف کنیم ؟
سلام دوست عزیز
ببخشید من این کد را در VS نوشتم و فقط کپی کردم.

نیازی به private نیست هر جوری که نیاز داشتید متد را تعریف کنید.
این کد یک Method (متد) است که یک string گرفته و مغلوب آن را بر گشت می دهد و شما از آن هر کجایی که نیاز داشته باشید می توانید استفاده کنید.
استفاده از متغیر زیر فقط برای برگشت دادن خروجی به متد می باشد منظور شما از "این هم عوض میشه" را نمی فهمم.]


string output ="";
...
...
output+=text[i];



با تشکر AHS