本人学生,马上上大二,第一次写博客,希望各位大佬提些建议,多多指教。
题目要求
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
需要注意:
1、输入样例Hello World前面或者 I Come的后面可以加空格,这会对结果产生影响。如果这里没处理好,运行程序结果是输出结果最前面或最后面多出空格,PTA检测出来一般就是格式错误。
2、输入样例是直接输入回车时,在编译器里运行应该是无输出(在回车下一行直接就显示Press any key to continue)。代码①我是在VC++6.0里调试的,如果按回车后有些许卡顿,可能是指针数组空值还进行输出了。
3、因为我是在VC++6.0里调试,指针数组无法设置太大(我觉得是内存原因,设置太大了无法运行,运行时程序直接出现Press any key to continue),粘贴代码到PTA时,得把指针数组大小修改到合适大小,不然有一个测试点过不了,PTA会测试出答案错误。
4、gets()不能用,不然有个测试点会一直显示运行时错误。
其他问题一般就是程序本身存在方法上的问题。
有用二维数组存每个单词的方法,但是二维数组的容量这题不太容易符合要求。
上传正确的代码我写有两种:
①用指针数组每个元素指向每个单词首字母,每个单词后加‘\0’(结束标记)
(这段代码编译器内测试时,Node数组大小得设置小一些)
#include<stdio.h>
#include<string.h>
int main(void){
char input[500000];
char* Node[250000];
int wordNumber = 0, sign = 0;
int i = 0, length;
while (1){
scanf("%c", &input[i]);
if (input[i] == '\n'){
break;
}
i++;
}
input[i] = '\0';
length = strlen(input);
for (i = 0; i < length; i++){
if (input[i] == ' '){
if (sign == 1){
input[i] = '\0';
sign = 0;
}
}else {
if (sign == 0){
Node[wordNumber++] = input+i;
sign = 1;
}
}
}
for (i = wordNumber-1; i > 0; i--){
printf("%s ", Node[i]);
}
if (i == 0 && Node != NULL){
printf("%s", Node[0]);
}
return 0;
}
②倒着输出每个单词
#include<stdio.h>
#include<string.h>
int main(void){
char input[500000];
int begin, end,sign = 0;
int i = 0, length, j;
while (1){
scanf("%c", &input[i]);
if (input[i] == '\n'){
break;
}
i++;
}
input[i] = '\0';
length = strlen(input);
for (i = length-1; i >= 0; i--){
if (input[i] == ' '){
if (sign == 1){
sign = 0;
for (j = begin; j <= end; j++){
printf("%c", input[j]);
}
if (isLastWord(input, begin) == 0){
printf(" ");
}
}
}else{
begin = i;
if (sign == 0){
end = i;
}
sign = 1;
}
}
if (input[0] != ' '){
for (j = begin; j <= end; j++){
printf("%c", input[j]);
}
}
return 0;
}
int isLastWord(char* input, int index){
int i;
int is = 1;
for (i = 0; i < index; i++){
if (input[i] != ' '){
is = 0;
break;
}
}
return is;
}
嘿!写完了。第一次写,写完的时候时不时就想笑^ _ ^ ,心情还是不错的。