Yes ,I can ! 2019-10-25 00:55 采纳率: 0%
浏览 485

为什么提交后显示段错误?? (最大句子,卡strcat:前500000个字母组成1个单词,后面每个单词1个字母 段错误)

问题:给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。

输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello

#include
#include
#define MAX 500010
using namespace std;

int main()
{
void print(int start, int endd, char str[]);
char str[MAX];
char ch;
int i = 0;
int j = 0;
int k = 0;
int start[50];
int end[50];
bool tmp = true;
while((ch=getchar())!='\n')
{
if(ch!=' '&&tmp)
{
str[i]=ch;
start[j]=i;
i++;
j++;
tmp = false;
}
else if(ch!=' '&&!tmp)
{
str[i]=ch;
i++;
}
else if(ch==' '&&tmp)
{
continue;
}
else if(ch==' '&&!tmp)
{
end[k]=i-1;
//i++;
k++;
tmp=true;
}
}
end[j-1]=i-1;
for(int i=j-1;i>0;i--){
print(start[i], end[i], str);
}

for(int i=start[0];i<=end[0];i++){
    printf("%c",str[i]);
}
printf("\n");

return 0;

}
void print(int start, int endd, char str[])
{
for(int i=start;i<=endd;i++){
printf("%c",str[i]);
}
printf(" ");
}

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-10-25 10:35
    关注

    char str[MAX];
    定义在堆栈上,而且还递归,导致堆栈溢出

    可以用malloc在堆上动态分配

    评论

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 虚心请教几个问题,小生先有礼了
  • ¥30 截图中的mathematics程序转换成matlab