اذهب إلى المحتوى
  • 0

نموذج حشر سلسلة حرفية في سلسلة حرفية أخرى #C

محمد عنيبة

السؤال

هذا برنامج يحشر سلسلة s1 في سلسلة s2 عند مكان n يحدده المستخدم

#include<iostream.h>
void st(char s1[],char s2[],int n)
{int i,j;
for(i=0;s1[i]!='\0';i++);
for(j=0;s2[j]!='\0';j++);
for(i=i+1;i>=n-1;i--)
s1[i+j]=s1[i];
for(j=0;s2[j]!='\0';j++)
s1[n+j]=s2[j]; }
main()
{char x[100], y[10];
int n;
cin.getline(x,100);
cin.getline(y,10);
cout<<x<<endl;
cout<<y<<endl;
cout<<"enter the place"<<endl;
cin>>n;
st(x,y,n);
cout<<x<<endl;
cout<<y<<endl;
}

جربت أحولة لـForm بلغة #C بس عند التنفيذ يظهر خطأ System.IndexOutOfRangeException  عرفت أن الفهرس index لا يستطيع الوصول لكل عناصر المجموعة أو شيء من هذا القبيل فما المشكلة؟

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        { int i, j;
            for (i = 0; textBox1.Text[i] != '\0'; i++) ; 
            for ( j = 0; textBox2.Text[j] != '\0'; j++) ;
            for (i = i + 1; i >= int.Parse(textBox3.Text) - 1;i--)
            { StringBuilder sb = new StringBuilder(textBox1.Text); 
                sb[i + j] = textBox1.Text[i];
                textBox1.Text = sb.ToString();
            }
            for (j = 0; textBox2.Text[j] != '\0'; j++)
            { StringBuilder sb = new StringBuilder(textBox1.Text);
                sb[int.Parse(textBox3.Text) + j] = textBox2.Text[j];
                textBox1.Text = sb.ToString();
            }
            textBox4.Text = textBox1.Text;
        }
    }
}

 

تم التعديل في بواسطة محمد عنيبة
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

أنواع الـstrings في لغة C/C++ :

C-Style-Strings : وهي تعتبر null terminated strings كما أنها عبارة عن مصفوفة من الحروف بالإضافة إلى الـnull character في آخر تلك المصفوفة.
على سبيل المثال :

char name[] = "ahamad"; 

هي عبارة عن مصفوفة من الحروف بالإضافة إلى الـnull character في آخرها كما يلي:
[ "a", "h", "m", "a", "d", "\0" ]

C++ strings : لا تعتبر null terminated strings.

الشرط الموجود بالـfor loop يتعلق بالعثور على الـNull character وإذا لم يتم العثور عليه سيكون هذا عبارة عن infinite loop أي تكرار لا نهائي وينتهي بالخطأ الذي ذكرته بسبب زيادة متغير الi والمتغير j الى ارقام تتعدى حدود مصفوفة الحروف الموجودة.

الحل: جرب إستبدال الشرط الخاص بالعثور على null character بالشرط التالي:
إذا كان الـindex الخاص بالحرف اقل من  الـ string .length   - ناقص واحد
أي أن الشرط سيكون هكذا:
(str[i] < str.length - 1)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 33 دقائق مضت قال Abdulraheem Barghouthi:

أنواع الـstrings في لغة C/C++ :

C-Style-Strings : وهي تعتبر null terminated strings كما أنها عبارة عن مصفوفة من الحروف بالإضافة إلى الـnull character في آخر تلك المصفوفة.
على سبيل المثال :


char name[] = "ahamad"; 

هي عبارة عن مصفوفة من الحروف بالإضافة إلى الـnull character في آخرها كما يلي:
[ "a", "h", "m", "a", "d", "\0" ]

C++ strings : لا تعتبر null terminated strings.

الشرط الموجود بالـfor loop يتعلق بالعثور على الـNull character وإذا لم يتم العثور عليه سيكون هذا عبارة عن infinite loop أي تكرار لا نهائي وينتهي بالخطأ الذي ذكرته بسبب زيادة متغير الi والمتغير j الى ارقام تتعدى حدود مصفوفة الحروف الموجودة.

الحل: جرب إستبدال الشرط الخاص بالعثور على null character بالشرط التالي:
إذا كان الـindex الخاص بالحرف اقل من  الـ string .length   - ناقص واحد
أي أن الشرط سيكون هكذا:
(str[i] < str.length - 1)

 

شكرا بس بالمناسبة يعني كيف تحسب طول السلسلة بدون استخدام دوال جاهزة في #C

مثلا في ++C كل ماعليك فعله هو حساب الأحرف حتى '0\'

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

إليك الأمثلة التالية لحساب طول سلسة ما بدون إستخدام الدوال الجاهزة:
مثال 1: عن طريق التجربة والخطأ بإستخدام Do while loop

private int stringLength(string str) {
        int length = 0;
        bool done = false;
        do {
            try {
                char c = str[length];
                length++;
            } catch (IndexOutOfRangeException) {
                done = true;
            }
        } while(!done);
        return length;
    }

مثال 2: عن طريق إستخدام foreach loop
 

int numberOfLetters = 0;
foreach (var c in str)
{
    numberOfLetters++;
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...