الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف نحتسب تكرار الحروف بدون مصفوفات ؟

بدأه island في 3 أبريل 2013 · 4 رد · 1,576 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بعد السلام والتحية

 

كيف يمكنني احتساب تكرار كل حرف في كلمة التي يدخلها المستخدم

بحيث يصبح الناتج حسب ترتيب الحرف في الكلمة وليس أبجديا

وباستخدام دوال الكلاس string وليس باستخدام المصفوفات

 

 

هذا كودي

 

 int  x = 0,j,len;
        String c;
        char i;
         Scanner word = new Scanner(System.in);
         System.out.println("Enter you name,please: ");
            c = word.next();
            len = c.length();
            System.out.println("length of your name is:  " + len);
                 
            for(i='a'; i <= 'y' ; i++)
            {
            x=0;
            for(j=0; j< len;j++){
               
                 if (c.charAt(j)== i)  
                  {
                     x++;
                        
                  }
         }
         if(x>0)
         System.out.println(i + " " + x);
            }
                
    }
}

 

النتيجة لاسم sameer

 كالتالي:

a 1
e 2
m 1

r 1
s 1

 

...............................

وما أريده هو:

s 1

a 1

m 1

e 2

r 1

 

هل من طريقة اخرى؟

#2

السلام عليكم

 

بصراحة أنا لست مبرمج Java ولكن حسب معلوماتي فهي شبيهة جداً بلغة C# وقد كتبت برنامج مشابه لطلبك ويمكنك تحويله بسهولة إلى لغة Java

 

static void Main(string[] args)        {            int x = 0, len;            String c;            Console.Write("Enter you name,please: ");            c = Console.ReadLine();            len = c.Length;            Console.Write("length of your name is:  " + len + "\n");            String str ="";            for (int j = 0; j < len; j++)            {                for (int k = j; k < len; k++)                {                    if (c[j] == c[k] && !containLetter(str,c[j]))                        str += c[j];                }            }            for (int j = 0; j < str.Length; j++)            {                x=0;                for (int k = 0; k < len; k++)                {                    if(str[j]==c[k])                        x++;                }                if(x>0)                    Console.Write(str[j] + " " + x + "\n");            }                        Console.Read();        }        private static bool containLetter(string str, char letter)        {            for (int i = 0; i < str.Length; i++)                if (str == letter)                    return true;            return false;        }

عمل البرنامج كما يلي:

الحلقة التكرارية الأولى مهمتها انشاء كلمة جديدة لاتحوي أي أحرف مكررة أي أنها نفس الكلمة التي يدخلها المستخدم ولكن بحذف تكرار الأحرف

الحلقة التكرارية الثانية تمر على كل حرف من حروف الكلمة التي لا تحوي أحرف مكررة وتحوي حلقة تكرارية أخرة تمر على كل أحرف الكلمة التي أدخلها المستخدم وتحسب عدد تكرار الأحرف وبعدها تطبع الحرف حسب ترتيبه بالكلمة وبجانبه عدد التكرار

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

تم تعديل هذه المشاركة بواسطة Fuad-Prince في 3 أبريل 2013 في 14:16

#3
Fuad-Prince كتب:

السلام عليكم

 

بصراحة أنا لست مبرمج Java ولكن حسب معلوماتي فهي شبيهة جداً بلغة C# وقد كتبت برنامج مشابه لطلبك ويمكنك تحويله بسهولة إلى لغة Java

 

static void Main(string[] args)        {            int x = 0, len;            String c;            Console.Write("Enter you name,please: ");            c = Console.ReadLine();            len = c.Length;            Console.Write("length of your name is:  " + len + "\n");            String str ="";            for (int j = 0; j < len; j++)            {                for (int k = j; k < len; k++)                {                    if (c[j] == c[k] && !containLetter(str,c[j]))                        str += c[j];                }            }            for (int j = 0; j < str.Length; j++)            {                x=0;                for (int k = 0; k < len; k++)                {                    if(str[j]==c[k])                        x++;                }                if(x>0)                    Console.Write(str[j] + " " + x + "\n");            }                        Console.Read();        }        private static bool containLetter(string str, char letter)        {            for (int i = 0; i < str.Length; i++)                if (str == letter)                    return true;            return false;        }

عمل البرنامج كما يلي:

الحلقة التكرارية الأولى مهمتها انشاء كلمة جديدة لاتحوي أي أحرف مكررة أي أنها نفس الكلمة التي يدخلها المستخدم ولكن بحذف تكرار الأحرف

الحلقة التكرارية الثانية تمر على كل حرف من حروف الكلمة التي لا تحوي أحرف مكررة وتحوي حلقة تكرارية أخرة تمر على كل أحرف الكلمة التي أدخلها المستخدم وتحسب عدد تكرار الأحرف وبعدها تطبع الحرف حسب ترتيبه بالكلمة وبجانبه عدد التكرار

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

 

جميل جدا

شكرا جزيلا لك

تم تعديل هذه المشاركة بواسطة island في 3 أبريل 2013 في 18:17

#4

على الرحب والسعة

 

ولكنني اكتشفت خطأ بسيط بالبرنامج وهو أنه في الحلقة التكرارية الأولى يوجد ضمنها حلقة أخرى يمكن الإستغناء عنها لتصبح بالشكل التالي:

            for (int j = 0; j < len; j++)
            {

                    if (!containLetter(str,c[j]))
                        str += c[j];

            }

تم تعديل هذه المشاركة بواسطة Fuad-Prince في 4 أبريل 2013 في 07:35

1
#5
Fuad-Prince كتب:

على الرحب والسعة

 

ولكنني اكتشفت خطأ بسيط بالبرنامج وهو أنه في الحلقة التكرارية الأولى يوجد ضمنها حلقة أخرى يمكن الإستغناء عنها لتصبح بالشكل التالي:

            for (int j = 0; j < len; j++)
            {

                    if (!containLetter(str,c[j]))
                        str += c[j];

            }

 

 

بارك الله فيك

تم يا طيب

تسلم

مواضيع مشابهة