【发布时间】:2020-06-03 07:55:18
【问题描述】:
我正在尝试解决一个问题,该问题需要:输入少于 150 个字符的句子,并将该句子的字符全部变为大写,同时删除所有多余的空格,然后打印更改后的句子及其字符数到屏幕。
例如:
输入:Look in to the abyss
输出:LOOK IN TO THE ABYSS:20
我在 Dev-C++ 上测试了这个程序,它工作得很好,但是当我将它提交给 CodeForces 时,我遇到了运行时错误。我希望任何人都可以帮助我。
(我尝试使用 scanf("%[^\n]%*c", sen) 和 fgets(sen, sizeof(sen), stdin) 而不是 gets(sen) 但我仍然遇到运行时错误。另外,我使用一个不同的函数 strlength 而不是 strlen,因为我在向 CodeForces 提交那段代码时遇到了另一个与类型相关的错误)
P/s:对不起我的英语不好
#include <ctype.h>
#include <stdio.h>
int strlength(char* str){
int i,j = 0;
for (i=0; str[i]!= '\0';i++)
++j;
return j;
}
void strip_white_spaces(char* str){
int x,i;
for (x=i=0; str[i]!='\0';i++){
if (!isspace(str[i])||((i>0) && (!isspace(str[i-1]))))
str[x++] = str[i];
}
if (isspace(str[x-1]))
str[x-1]='\0';
else str[x] ='\0';
}
void touppercase(char* str){
int i;
for (i = 0; str[i] != '\0';i++ ){
if (str[i] >= 'a' && str[i] <= 'z')
str[i] -= 32;
}
}
void main(){
char sen[150];
gets(sen);
strip_white_spaces(sen);
touppercase(sen);
int s = strlength(sen);
printf("%s:%d", sen, s);
}
【问题讨论】:
-
CodeForces 是否提供任何类型的指示什么是运行时错误?
-
使用您最喜欢的调试器单步执行代码并找出崩溃的位置。请注意,C 语言中没有称为“gets”的函数——它在大约 25 年前被标记为过时,并在 9 年前被完全删除。您需要获得不会过时 30 年的新学习材料。
-
@Yonlif : CodeForces 只是指出存在运行时错误,但没有具体说明任何事情。