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