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

السؤال

نشر (معدل)

هذا برنامج يحشر سلسلة 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...