首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

想请问关于开一种新的数据结构型数组内存泄漏的有关问题

2012-05-29 
想请教关于开一种新的数据结构型数组内存泄漏的问题对于一个英文语句,把语句中的大写字母按照英文字典顺序

想请教关于开一种新的数据结构型数组内存泄漏的问题
对于一个英文语句,把语句中的大写字母按照英文字典顺序重新排列,排列后每个单词的长度要和原句一致。如果句子中出现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;} 

热点排行