توضیح:تعداد تکرارحروفaتاz

mhabat

Member
با سلام.سورس ماله یک برنامه هست که تعداد تکرار هر کارکتر ازaتاzرو می خونه و شبیه این تایپک است:
http://forum.majidonline.com/showthread.php?t=185530
با این تفاوت که وقتی تعداد تکرار رو محاسبه میکنه یک قسکت مرتب سازی داره برای مثال اگر تو یک کلمه
حرفmاز همه بیشتر بود اول تعدد تکرار اونو نمایش میده وبه همین ترتیب عمل میکنه.
حالا من چن. قسمتش رو مشکل دارم:
1-این قسمتش برام قابل درک نیست:
کد:
strget[0]=strsrc[0];
2-اگر میشه تابع sortشو کامل توضیح بدین.(خیلی پیچش نداده؟...!)
3-ما یکبار از دستورcin.getبرای گرفتن کارکتر ها استفاده کردیم.چرا یک باره دیگه ازین دستور استفاده کردیم:
کد:
cin.get();
سورس برنامه :
کد:
#include<iostream.h>
#include<conio.h>
#define SL 100
using namespace std;
//this function gets one sample of repeated characters from strsrc
// and count them in cnt indexs
void getchs(char strsrc[],char strget[],int cnt[])
{
   int i=1,j=0,exist=0;
   for(j=0;j<SL;j++)//set the all of strget cells to '\x0',cnt to 1
   {
      strget[j]='\x0';
      cnt[j]=1;
   }
   strget[0]=strsrc[0];
    while(strsrc[i]!='\x0')
   {
 for(j=0;strget[j]!='\x0';j++)
 {
    if(strsrc[i]==strget[j])
    {
      exist=1;
      cnt[j]++;
      break;
    }
 }
 if(exist==0)
   strget[j]=strsrc[i];
 exist=0;
 i++;
   }
}

void sort(int x[],char st[])
{
   int i,j,t1;
   char t2;
   for(i=SL;i>0;i--)
   {
      for(j=0;j<i-1;j++)
      {
        if(x[j]<x[j+1])
      {
        t1=x[j];
          t2=st[j];
        x[j]=x[j+1];
          st[j]=st[j+1];
        x[j+1]=t1;
          st[j+1]=t2;
      }
      }
   }
}

void main()
{
clrscr();
char str1[SL],str2[SL];
int i=0;
int cnt[SL];//counter in same index of str2
cout<<"This program is count characters in a text\n\n\n";
cout<<"Input original text :";
cin.get(str1,SL-1);
cin.get();
getchs(str1,str2,cnt);
cout<<"\nYour text made of follow characters:";

sort(cnt,str2);
while(i<SL)
{
   if(str2[i]!='\x0')
      cout<<"\n( "<<str2[i]<<" ) Repeated "<<cnt[i]<<" Times";
     i++;
}
getch();
}
خیلی ممنون
بــــدرود
 

the_king

مدیرکل انجمن
با سلام.سورس ماله یک برنامه هست که تعداد تکرار هر کارکتر ازaتاzرو می خونه و شبیه این تایپک است:
http://forum.majidonline.com/showthread.php?t=185530
با این تفاوت که وقتی تعداد تکرار رو محاسبه میکنه یک قسکت مرتب سازی داره برای مثال اگر تو یک کلمه
حرفmاز همه بیشتر بود اول تعدد تکرار اونو نمایش میده وبه همین ترتیب عمل میکنه.

طول رشته n کاراکتره، پس حداکثر تعداد تکرار یک کاراکتر n ئه، از n تا 1 بصورت نزولی در یک حلقه می شماریم
و هر کاراکتری که تعداد تکرار اش برابر اون عدد حلقه باشه نمایش می دهیم.
کد:
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    int count[256], i, j, n;
    char text[500];
    cin.getline(text, 500);
    for (i = 0; i < 256; i++)
        count[i] = 0;
    for (i = 0; text[i]; i++)
        count[text[i]]++;
    n = i;
    for (j = n; j >= 1; j--)
        for (i = 0; i < 256; i++)
            if (count[i] == j)
                cout << "character '" << (char)i << "' : " << count[i] << endl;
    getch();
    return 0;
}
 

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

بالا