ورود

View Full Version : سوال: اشكال در مورد مقلوب یک رشته و اشاره گر ها



karim orooji
چهارشنبه 11 آذر 1388, 16:40 عصر
سلام دوستان
دو تا سوال داشتم :
1. من ميخوام يه رشته رو معكوس چاپ كنم اما در تابع مشكل ميده
اينم كد برنامه

#include <iostream.h>
void maks(char []);
void main()
{
char s1[11];
cout<<"s1 : ";
cin>>s1[10];
maks(m);
//*********maks************
void(char m[])
{
int i;
char m[10];
for(i=0;i<m[i];i++)
{
cout<<m[i];
}

}

2. تابعي بنويسيد كه يك اشاره گر از نوع صحيح و عدد صحيح n را به عنوان پارامتر پديرفته حافظه اي براي n عدد صحيح تخصيص بده و ادرسشو به برنام برگردونه اما كد جواب نميده
ممنون ميشم كمكم كنيد
اينم كدش

#include <iostream.h>
#include <stdlib.h>
long memory();
int main()
{
long n;
cin>>n;
memory(a);
return 0;
}
//********memory*************
long memory(long a)
{
int *fp;
fp=new int;
if(!fp)
{
cout<<"allocation failure"
exit(1);
}
fp=&a
retrun fp;
}

majidmt
چهارشنبه 11 آذر 1388, 19:27 عصر
دوست عزیز شما میخوای یک رشته بخونی ولی این دستور یک کارکتر میخونه
cin>>s1[10];
و این داخل این تابعی که نوشتی دوباره رشته تعریف کردی در واقع آرگومانی به تابع رد نمیشه که بخواد روش کار کنه و برعکسش کنه

karim orooji
چهارشنبه 11 آذر 1388, 19:34 عصر
دوست عزيز
به اين صورت تغييرش دادم بازم درست نشد

#include <iostream.h>
void maks(char []);
void main()
{
int const n=10;
char s1[n];
cout<<"s1 : ";
cin.get(s1,n);
maks(m);
//*********maks************
void maks(char m[])
{
int i;
char m[10];
for(i=0;i<m[i];i--)
{
cout<<m[i];
}

}

#Elahe#
چهارشنبه 11 آذر 1388, 20:26 عصر
for(i=0;i<11;i++)
cin>>s1[i];
for(i=10;i>=0;i--)
cout<<s1[i]<<endl;


دوستان ببینید این جواب من واسه سوال اولی ( معکوس کردن) درسته ؟

karim orooji
چهارشنبه 11 آذر 1388, 21:23 عصر
دوست عزيز دقيق جواب نميده
ميشه خودتونم تو كدي كه گذاشتم تست كنيد

majidmt
پنج شنبه 12 آذر 1388, 10:42 صبح
for(i=0;i<11;i++)
cin>>s1[i];
for(i=10;i>=0;i--)
cout<<s1[i]<<endl;
خواندن رشته اونم حرف به حرف کار اشنباهی است
=======================================
cin>>s;
for(i=n;i<0;i--)
cout<<s[i];
فقط برای بدست آوردن طول رشته از دستور
strlen
میتونید استفاده کنید

Altech
پنج شنبه 12 آذر 1388, 11:46 صبح
برای اولی این جواب میده :


#include <iostream.h>

void maks(char []);
void main()
{
char s1[11];
cout<<"s1 : ";
cin.getline( s1, 11 );
maks(s1);
}
void maks (char m[])
{
int i;
for(i=9;i>=0;i--)
{
cout<<m[i];
}

}
برای دومی هم این :


#include <iostream.h>
#include <stdlib.h>
int* memory(int);
int main()
{
int n;
cin>>n;
memory(n);
return 0;
}
//********memory*************
int* memory(int a)
{
int *fp;
fp=new int[a];
if(!fp)
{
cout<<"allocation failure";
exit(1);
}
return fp;
}

Salar Ashgi
پنج شنبه 12 آذر 1388, 15:37 عصر
برای معکوس رشته با هر طولی :



#include <iostream>
#include <conio>
#include <string>
void swap(char &a,char &b){
char temp = a;
a = b;
b = temp;}
//==========================
void Reverse(char a[]){
int len = strlen(a);
for(int i=0;i<len/2;i++){
swap(a[i],a[len-1-i]);}
}
//==========================
int main(){
char a[20];
cin.getline(a,20);
Reverse(a);
cout<<a<<endl;
getch();
}

Altech
پنج شنبه 12 آذر 1388, 17:27 عصر
این هم میشه . برای هر طولی . یه کم راحت تر :


#include <string>
#include <iostream>
using namespace std;

string reverse( string a )
{
string temp;
temp.resize( a.length() );
for( size_t i = 0; i < a.length(); i++ )
temp[ a.length() - 1 - i ] = a[ i ];
return temp;
}

int main()
{
string a;
getline( cin, a );
cout << reverse( a );

return 0;
}

karim orooji
جمعه 13 آذر 1388, 10:39 صبح
سلام دوستان
مربوط به سوال دوم
من اين كد رو به اين صورت تغيير دادم اما در exit اين error رو ميده
statement missing in function memory(long)


#include <iostream.h>
#include <stdlib.h>
long* memory(long);
long main()
{
long n;
cin>>n;
memory(n);
return 0;
}
//********memory*************
long* memory(long a)
{
long *fp;
fp=new long(a);
if(!fp)
{
cout<<"allocation failure"
exit(1);
}
return fp;
}

و چرا * در جلوي long گذاشتين

long* memory(long);

Altech
جمعه 13 آذر 1388, 17:46 عصر
سلام دوستان
مربوط به سوال دوم
من اين كد رو به اين صورت تغيير دادم اما در exit اين error رو ميده
statement missing in function memory(long)

برای اینکه بعد از گیومه بسته دستور cout علامت ; رو نداشتین .



و چرا * در جلوي long گذاشتين

long* memory(long);

اگه یه تابع قراره یه آدرس برگردونه باید * هم گذاشته بشه . چون یه متغیر معمولی نمی تونه آدرس نگه داره . اشاره گر می تونه این کارو بکنه . برای همین گفتیم که این تابع یه اشاره گر به long برگردونه

karim orooji
جمعه 13 آذر 1388, 19:27 عصر
دوست عزيز
بهتر نيست به اين صورت بنويسيم

long memory (*long)
ممنون از راهنمايي اما چرا برنامه خروجي نداره
ميخوام با وارد كردن يك عدد ادرس اون خونه رو نمايش يده

Altech
جمعه 13 آذر 1388, 21:50 عصر
دوست عزيز
بهتر نيست به اين صورت بنويسيم

long memory (*long)ممنون از راهنمايي اما چرا برنامه خروجي نداره
ميخوام با وارد كردن يك عدد ادرس اون خونه رو نمايش يده

نه این برنامه همین کارو براتون می کنه .



#include <iostream.h>
#include <stdlib.h>
long* memory(long);
long main()
{
long n;
cin>>n;
cout << memory(n);
return 0;
}
//********memory*************
long* memory(long a)
{
long *fp;
fp=new long(a);
if(!fp)
{
cout<<"allocation failure";
exit(1);
}
return fp;
}

behnezhad
دوشنبه 16 آذر 1388, 11:54 صبح
اینم یه جواب کوتاه واسه سوال اولتون که از تابع reverse خود STL استفاده می کنه

#include<cstdio>
#include<algorithm>
char c[100];
int main()
{
scanf("%s", c);
std::reverse(c, c+strlen(c));
printf("%s\n", c);
return 0;
}