مشکل:سورس کار با رشته ها(گرفتن رشته و...)

mhabat

Member
با سلام ونشکـــر من دارم چندتا تمرین درمورد کار بارشته ها رو حل میکنم که چند تا مشکل دارم.
تمرین 1-تابعی بنویسید که دوعدد گرفته و اگر اولی بزرگ بود 1را برگرداند واگر دومی بزرگتر بود 2 را برگرداند واگر مساوی بودند -1را برگرداند.
سورسشو نوشتم اما بعضی اعداد درست کار میکنه رو بعضی هاش نه مثلا 12و13رومیدی میزنه مساوی هستند.سورس:
کد:
#include<iostream.h>
#include<conio.h>
char ali(char x[],char y[]) {
for(int i=0;i!='\0';i++)
if(x[i]>y[i])
return 1;
else if(x[i]<y[i])
return 0;
else if(x[i]==y[i])
return -1; }
int main() { clrscr();
char a[64],b[64];
cin>>a;
cin>>b;
if(ali(a,b)==1)
cout<<"The number is biger:"<<a;
if(ali(a,b)==0)
cout<<"The number is biger:"<<b;
if(ali(a,b)==-1)
cout<<"The numbers is mosave";
getch(); return 0; }
تمرین 2-برنامه یی بنویسید که رشته از ورودی گرفته واندازه ی آن هارا چاپ کند و سپس رشته ی دومی را در اولی قراردهد.
سورسشو تا قسمت اولش نوشتم اما نمتانم ادغمشون کنم.سورس:
کد:
#include<iostream.h>
#include<conio.h>
int main(){ clrscr();
char a,b;
int i=-1;int j=-1;
while(a!=13){
a=getche();
i++; }
cout<<endl;
while(b!=13){
b=getche();
j++; }
clrscr();
cout<<"The own  Charecter Numbers: "<<i<<endl;
cout<<"The thow Charecter Numbers: "<<j<<endl;
getch(); return 0; }
تمرین 3-برنامه یی بنویسید که تمرین قبل را با دریافت nکارکتر اول و یا nکارکتر دوم انجام دهد.
اینو بلد نبودم.
تمرین 4-برنامه یی بنویسید که دوزشته را گرفته وآن هارا به هم وصل کند.
سورسش مشکلش اینه که نمی تونم به صورت اسکی نمایشش بدم.سورس:
کد:
#include<conio.h>
#include <iostream.h>
int main()
{
char a[64],b[64];char c[128];
cout<<"Enter 2 strings:"<<endl;
cin>>a;
cin>>b;
for(int i=0;a[i]!='\0';i++)
for(int j=0;a[j]!='\0';j++)
for(int k=0;c[k]!='\0';k++)
c[k]=a[i]+b[j];
cout<<c;
getch(); return 0; }
از دستور بالا برای اینکه یک رشته از ورودی بگیریم و به صورت معکوس چاپش کنه استفاده کردم اما میشد حروف چینی.
اگه تو این سورس کد:
کد:
[FONT=F8][SIZE=2][COLOR=#0000ff][FONT=F8][SIZE=2][COLOR=#0000ff]

[SIZE=2][FONT=F8][COLOR=#0000ff]#include 
[/COLOR][/FONT][/SIZE][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][LEFT][FONT=F8][SIZE=2][FONT=F8][SIZE=2]<iostream.h>[/SIZE][/FONT][/SIZE][/FONT][FONT=F8][SIZE=2]
[LEFT][/SIZE][/FONT][FONT=F8][SIZE=2][COLOR=#0000ff][FONT=F8][SIZE=2][COLOR=#0000ff][FONT=F8][SIZE=2][COLOR=#0000ff]int [/LEFT]
[/LEFT]
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][LEFT][FONT=F8][SIZE=2][FONT=F8][SIZE=2]main()[/SIZE][/FONT][/SIZE][/FONT][FONT=F8][SIZE=2]
[LEFT][SIZE=2][FONT=F8]{[/FONT][/SIZE]
[SIZE=2][FONT=F8]char a[64],b[64];[/FONT][/SIZE]
[SIZE=2][FONT=F8]cout<<"Enter 2 strings:"<<endl;[/FONT][/SIZE]
[SIZE=2][FONT=F8]cin>>a;[/FONT][/SIZE]
[SIZE=2][FONT=F8]cin>>b;[/FONT][/SIZE]
[/SIZE][/FONT][FONT=F9][SIZE=2][FONT=F9][SIZE=2][/LEFT]
[/LEFT]
[/SIZE][/FONT][/SIZE][/FONT][LEFT][FONT=F8][SIZE=2][FONT=F8][SIZE=2]int i=0;[/SIZE][/FONT][/SIZE][/FONT][FONT=F8][SIZE=2]
[LEFT][SIZE=2][FONT=F8]do{[/FONT][/SIZE]
[SIZE=2][FONT=F8]a[i]=b[i];[/FONT][/SIZE]
[SIZE=2][FONT=F8]}while(b[i++]!='\0');[/FONT][/SIZE]
[/SIZE][/FONT][FONT=F9][SIZE=2][FONT=F9][SIZE=2][/LEFT]
[/LEFT]
[/SIZE][/FONT][/SIZE][/FONT][LEFT][FONT=F8][SIZE=2][FONT=F8][SIZE=2]a[i]='\0';[/SIZE][/FONT][/SIZE][/FONT][FONT=F8][SIZE=2]
[LEFT][/SIZE][/FONT][FONT=F9][SIZE=2][FONT=F9][SIZE=2][/SIZE][/FONT]
[/SIZE][/FONT][FONT=F8][SIZE=2][COLOR=#0000ff][FONT=F8][SIZE=2][COLOR=#0000ff][FONT=F8][SIZE=2][COLOR=#0000ff]return [/LEFT]
[/LEFT]
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][LEFT][FONT=F8][SIZE=2][FONT=F8][SIZE=2]0;[/SIZE][/FONT][/SIZE][/FONT][FONT=F8][SIZE=2]
[/SIZE][/FONT][FONT=F3][SIZE=1][FONT=F3][SIZE=1] [/SIZE][/FONT][/SIZE][/FONT][FONT=F8][SIZE=2][FONT=F8][SIZE=2]}[/SIZE][/FONT]
[/SIZE][/FONT]
چرا در آخر با این دستور iرو می بنده:
کد:
[FONT=F8][SIZE=2]
[SIZE=2][FONT=F8]a[i]='\0';[/FONT][/SIZE]
[/SIZE][/FONT]
لازم به ذکر کا این تمرین هارو میشد با فایل سرآمدstring.hانجام داد اما تمرینی برای خودمه
باتشکر
بــــدرود
[/LEFT]
 

the_king

مدیرکل انجمن
لطفا از این به بعد هر کدام از سوالات رو در یک مبحث جدید و جداگانه مطرح کنید :
B4 - اگر چندین سوال دارید که بهم مربوط نیستند، در مبحث های جداگانه مطرح شان کنید.
زمانی که چند سوال را در یک مبحث مطرح می کنید نمی توانید یک عنوان دقیق و با جزئیات انتخاب نمایید،در نتیجه ناچار می شوید که از یک عنوان نامناسب مثل "چند سوال در مورد فتوشاپ" استفاده کنید که خیلی مبهم و کلی است و مشخص کننده موضوع سوال شما نخواهد بود.  

با سلام ونشکـــر من دارم چندتا تمرین درمورد کار بارشته ها رو حل میکنم که چند تا مشکل دارم.
تمرین 1-تابعی بنویسید که دوعدد گرفته و اگر اولی بزرگ بود 1را برگرداند واگر دومی بزرگتر بود 2 را برگرداند واگر مساوی بودند -1را برگرداند.
سورسشو نوشتم اما بعضی اعداد درست کار میکنه رو بعضی هاش نه مثلا 12و13رومیدی میزنه مساوی هستند.

1) زمانی که دو رقم متناظر با هم برابر نیستند یکی از اعداد بزرگتر است و آن یکی کوچکتر و می توانید همانجا
1 یا 2 را برگردانید. اما اگر دو رقم متناظر با هم برابرند مفهوم اش این نیست که الزاما دو عدد برابر اند، باید به
بررسی سایر ارقام ادامه دهید، ممکن است در رقم های بعدی تساوی برقرار نباشد. فقط زمانی باید 1- را برگردانید
که تمامی ارقام متناظر را با هم مقایسه کرده اید و همه شان مساوی اند و حلقه بررسی به انتها رسیده.
بنابر این کد زیر بر اساس صرفا مقایسه دو رقم دارد یک پیش داوری می کند که می تواند اشتباه باشد :
کد:
if(x[i]==y[i])
return -1;

2) اگر تعداد رقم های دو عدد برابر نباشد، مثلا 9 را با 12345 مقایسه کنید، اولین دو رقمی که با هم مقایسه خواهید
کرد 9 با 1 است، و چون اولی بزرگتر است به اشتباه عدد 9 را از 12345 بزرگتر اعلام می کنید. بهتر شیوه مقایسه
را تغییر دهید، اول رشته را به عدد int تبدیل کرده و سپس دو عدد int را با هم مقایسه کنید، نه دو رشته.

3) متغیر i یک عدد است که اندیس کاراکتر را مشخص می کند ، مقایسه کردنش با کاراکتر '0\' بی معنی است :
کد:
for(int i=0;i!='\0';i++)
شما باید کاراکتری را با '0\' مقایسه کنید، منظورتان احتمالا چیزی شبیه به این است :
کد:
for (int i = 0; x[i] != '\0'; i++)

کد:
#include <iostream.h>
#include<conio.h>

char ali(char x[], char y[])
{
    int a = 0;
    for (int i = 0; x[i] != '\0'; i++)
        a = a * 10 + x[i] - '0';
    int b = 0;
    for (int j = 0; y[j] != '\0'; j++)
        b = b * 10 + y[j] - '0';
    if (a > b)
        return 1;
    if (a < b)
        return 0;
    return -1;
}

int main()
{
    clrscr();
    char a[64], b[64];
    cin >> a;
    cin >> b;
    int r = ali(a,b);
    if (r == 1)
        cout << "The first number is bigger : " << a;
    if (r == 0)
        cout << "The second number is bigger : " << b;
    if (r == -1)
        cout << "The two numbers are equal.";
    getch();
    return 0;
}
 

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

بالا