【发布时间】:2021-12-09 23:54:22
【问题描述】:
我正在尝试编写一个程序,该程序接受输入的字符串并反转单词的顺序。它还计算语句中有多少单词。所以如果输入“蝙蝠侠与知更鸟”,它会打印:
robin and batman
words in statement: 3
我的程序大部分都可以正常工作,但它以一种奇怪的方式打印。这将是我编写的程序中“batman and robin”的输出:
robin
and batman
words in statement: 2
我不知道为什么会有一个额外的换行符将第一个单词与其他单词分开。无论我输入什么,第一个单词总是与其他单词分开,并且计数是一个。我不确定额外的换行符来自哪里。我可以通过在打印之前将计数加一来解决计数问题,但我正在尝试找到更好的解决方案。
我的代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#include<string.h>
int main(void) {
char ent[50], rev[50];
int length, i = 0, start, end, j = 0, count = 0, k;
printf("Enter a statement: ");
fgets(ent, 50, stdin);
//printf("%s\n", ent);
length = strlen(ent);
start = length - 1;
end = length - 1;
while (start > 0) {
if (ent[start] == ' ') {
i = start + 1;
count++;
while (i <= end) {
rev[j] = ent[i];
i++;
j++;
}
rev[j++] = ' ';
end = start - 1;
}
start--;
}
for (i = 0; i <= end; i++) {
rev[j] = ent[i];
j++;
}
rev[j] = '\0';
//count = count + 1;
printf("Reversed statement: %s\n", rev);
printf("Words in statement: %d\n", count);
return(0);
}
【问题讨论】:
-
旁注:不要写
fgets(ent, 50, stdin);,你可以写fgets(ent, sizeof ent, stdin);。这样做的好处是,如果您更改了ent的大小,那么您只需更改一个数字,而不是两个。如果您不这样做,那么如果您在一个地方更改数字,但在另一个地方也忘记更改它,那么您就有可能出现错误。
标签: c string for-loop while-loop