读书人

想请问关于开一种新的数据结构型数组内

发布时间: 2012-05-29 12:16:00 作者: rapoo

想请教关于开一种新的数据结构型数组内存泄漏的问题
对于一个英文语句,把语句中的大写字母按照英文字典顺序重新排列,排列后每个单词的长度要和原句一致。如果句子中出现26个大写字母以外的字符,则位置不变。
所有字符均在ASCII中,一条语句字符数量不超过50。
详见Simple


Input
输入有n+1行。第一行为测试数据的组数n, 一下的n行为n个英文语句。


Output
输出排序之后的语句。


Sample Input
3
Hello World C++ Java
YOU JUMP, I JUMP.
3*4=1 1
Sample Output
Cello Horld J++ Wava
IJJ MMOP, P UUUY.
3*4=1 1


我的代码如下
#include <iostream>
#include <string>

using namespace std;
#define MaxSize 51

typedef struct
{
char data;
int pos;
}node;




void findDaxie(char * str,node * n,int count)
{ int i=0,j=0;
while(i<count)
{
if(str[i]<91&&str[i]>64)
{
n[j].data=str[i];
n[j].pos=i;
j++;
}
i++;
}

char iTemp;
for( i=1;i<j;i++)
{
for( k=j-1;k>=i;k--)
{
if(n[k].data<n[k-1].data)
{
iTemp = n[k-1].data;
n[k-1].data = n[k].data;
n[k].data = iTemp;
}
}
}
for(i=0;i<j;i++)
str[n[i].pos]=n[i].data;
}


int main()
{ char str[MaxSize];
node n[MaxSize];
string tstr;
int t,i,length;
cin>>t;
while(t--)
{
cin.ignore();
getline(cin,tstr);
length=tstr.size();
for(i=0;i<length;i++)str[i]=tstr[i];
findDaxie(str,n,length);

for(i=0;i<length;i++)cout<<str[i];
cout<<endl;
}

}

测试结构是Runtime Error (SIGSEGV) - 0

可是找不出问题在哪 ,也不太懂如何调试 ,希望能有大牛指点迷津~ 多谢!

[解决办法]
替你改好了

1. 主程序做了修改,请注意注释的部分
2. 冒泡排序部分做了修改,注释掉的部分是你以前的代码,注释行下面的是我改正后的代码


C/C++ code
#include <iostream>#include <string>using namespace std;#define MaxSize 51typedef struct{    char data;    int pos;}node;void findDaxie(char * str,node * n,int count){     int i=0,j=0;    int k;    while(i<count)    {        if(str[i]<91 && str[i]>64)        {            n[j].data=str[i];            n[j].pos=i;            j++;        }        i++;    }        char iTemp;    //使用冒泡排序算法,排序    //for( i=1;i<j;i++)    for (i=1;i<j-1;i++)      {        //for( k=j-1;k>=i;k--)        for (k=1;k<j-i;k++)        {            if(n[k].data<n[k-1].data)            {                iTemp = n[k-1].data;                n[k-1].data = n[k].data;                n[k].data = iTemp;            }        }    }    for(i=0;i<j;i++)        str[n[i].pos]=n[i].data;}int main(int argc, char* argv[]){    char str[MaxSize];    node n[MaxSize];    string tstr;    int t,i,length;    cin>>t;    cin.ignore();  //移动这行到循环外,否则,从第二行起,行首字符会丢失。    while(t--)    {        getline(cin,tstr);        length=tstr.size();        for(i=0;i<length;i++)            str[i]=tstr[i];        str[i]=0;   //必须加上字符串结束符号                findDaxie(str,n,length);        for(i=0;i<length;i++)            cout<<str[i];        cout<<endl;    }    return 0;} 

读书人网 >C++

热点推荐