PDA

View Full Version : مشکل تابع مرتب کننده آرایه ی رشته ای زیر چیه؟



000011000011
جمعه 26 آذر 1389, 11:13 صبح
من یک تابه نوشتم که آرایه رو با توچه به طور رشته ی هر عنصرش مرتب میکنه وقی اجراش می کنم کامپایلر نه ارور میده نه اخطار ولی کار نمی کنه و vc++ دیباگر بالا می یاد و اخطار پایین رو میده (این اخطار ممکن توسیستم شما فرق کنه)


First-chance exception at 0x1026f8bc (msvcr90d.dll) in as.exe: 0xC0000005: Access violation reading location 0x00000001.
Unhandled exception at 0x1026f8bc (msvcr90d.dll) in as.exe: 0xC0000005: Access violation reading location 0x00000001.


و خود کد هم همین است که در پایین می گذارم



#include <iostream>
#include <iomanip>//setw ,setprecision;
#include <ctime>
#include <cstdlib>//rand
using namespace std;
#ifndef print
#define print cout <<
#endif
#ifndef L
#define L <<endl
#endif
template <class T>
T getMAX( T m[],int s){
T _max = m[1];
for(int i = 0;i<s;i++){
if(m[i] > _max){
_max = m[i];
}
}
return _max;
}
template <class T>
T getMIN(T m[],int s){
T _min = m[1];
for( int i = 0; i < s; i++ ){
if(m[i] < _min){

_min = m[i];
}
}
return _min;
}
template <class T>
void sortArray(T m[],const int _size){
T Array_min_element = getMIN(m,_size);
T Array_max_element = getMAX(m,_size);
int *tmparray = new int[_size];
int tmparray_count = 0;
tmparray[tmparray_count] = Array_min_element;
for(T i = Array_min_element;i < Array_max_element;i++){
for(int n = 0;n<_size;n++){
if(i == Array_min_element){
continue;
}
if(m[n] == i){
++tmparray_count;
tmparray[tmparray_count] = m[n];

}
}
}
tmparray[tmparray_count+1] = Array_max_element;
for(int i = 0;i<_size;i++){
m[i] = tmparray[i];
}
delete [] tmparray;
}
void cArray_sort(char* m[],const int size){
int *tmp = new int[size];
char *ctmp[sizeof(tmp)/sizeof(int)] = {0};
int tmp_counter = 0;
int ctmp_counter = 0;
for(int i =0;i<size;i++){
tmp[tmp_counter]= strlen(m[i]);
++tmp_counter;
}
sortArray(tmp,size);

for(int n = 0;n < size;n++){
for(int r = 0; r < size; r++){
if(strlen(m[r]) == tmp[n]){
ctmp[ctmp_counter] = m[r];
++ctmp_counter;
}
}
}
for(int b = 0;b < size;b++){
m[b] = ctmp[b];
}
delete [] tmp;
}
///////////////////////////////////////////////////////////////////////////////////////////
int main(){
//test function
char *n[7] = {"google","cplusplus","cprogramming","barnameh","program","cpp","c"};
cArray_sort(n,7);
for(int i = 0;i < 7;i++){
print n[i] L;
}
return 0;
}

Salar Ashgi
جمعه 26 آذر 1389, 22:57 عصر
دوست عزیز ، کدتان خیلی شلوغ و مبهم است ؛ اگر هدفتان مرتب کردن آرایه ای هست که هر خانه اش یک رشته میباشد ،
میتوانید توسط Vector ها اینکار را انجام دهید :


#include <iostream>
#include <conio>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main(){
vector<string> v;
v.push_back("salar");
v.push_back("ali");
v.push_back("hossain");
v.push_back("reza");
//----------------------
sort(v.begin(),v.end());
//----------------------
for(int i=0;i<v.size();i++)
cout<<v[i]<<endl;
getch();
}



نتیجه :

63744

موفق باشید ./

000011000011
شنبه 27 آذر 1389, 15:15 عصر
سلام
درسته این رو که خودم هم می دونم می خوام ببینم مشکل کد من چیه که بدون ارور و اخطار اجرا نمیشه

Salar Ashgi
یک شنبه 28 آذر 1389, 00:36 صبح
این رو که خودم هم می دونم

البته مطلبی که بنده ذکر کردم ، آنچنان هم جزو بدیهیات نبود !


می خوام ببینم مشکل کد من چیه که بدون ارور و اخطار اجرا نمیشه

کد شما خیلی شلوغ و مبهم است ، باید خودتون کد رو Trace کنید و ببینید
که آیا منطق برنامه از لحاظ الگوریتمی درست است یا خیر . در ضمن با وجود
روشهای ساده ای مثل روشی که ذکر کردم ، چه نیاز به کدهای پیچیده و ... است ؟!

موفق باشید ./