c -程序反转字符串中的单词顺序,错误地打印反转字符串



我正在尝试编写一个程序,该程序接受输入的字符串并反转单词的顺序。它还计算语句中有多少个单词。如果"蝙蝠侠和罗宾"输入时,它会打印:

robin and batman
words in statement: 3

我的程序基本上可以工作,但是它以一种奇怪的方式打印。这将是"蝙蝠侠和罗宾"的输出。在我写的程序中:

robin
and batman
words in statement: 2

我不知道为什么有一个额外的换行符将第一个单词与其他单词分开。无论我输入什么,第一个单词总是与其他单词分开,计数是一次。我不确定额外的换行符是从哪里来的。我可以通过在打印前在计数上加1来解决计数问题,但我正在努力找到一个更好的解决方案。

我代码:

#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("%sn", 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] = '';
//count = count + 1;
printf("Reversed statement: %sn", rev);
printf("Words in statement: %dn", count);
return(0);
}

如果函数fgets读取换行符,那么它也会将其写入字符串。

因此,您将给rev写的第一个单词不是"robin",而是"robinn"。这就是导致您所发布的不希望的输出的原因。

您可以处理换行符,或者在调用fgets后立即删除它。关于删除换行符的最佳方法,请参阅这个问题:

从fgets()输入中删除尾随换行符

相关内容

  • 没有找到相关文章

最新更新