c - 反转字符串中单词顺序的程序错误地打印反转的字符串
问题描述
我正在尝试编写一个程序,该程序接受输入的字符串并反转单词的顺序。它还计算语句中有多少单词。因此,如果输入“batman and robin”,它将打印:
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
读取换行符,那么它也会将其写入字符串。
因此,您要写的第一个单词rev
不是"robin"
,而是"robin\n"
。这就是导致您发布的不良输出的原因。
您可以处理换行符,也可以在调用fgets
. 请参阅此问题,了解删除换行符的最佳方法:
推荐阅读
- java - Java spark 通过 S3 API 访问 emc 对象存储
- google-sheets - 谷歌表格;比较 3 列和行中的数据,如果数据相似,则突出显示单元格
- tensorflow - 获取图像分割中单个测试图像的准确性
- sql-server - 以相同格式将 xml 文件导入 SQL Server
- watson-conversation - 如何将 ibm watson 助手聊天机器人部署到我已经托管的网站?
- reactjs - Firebase 在特定范围内加载 lada
- oracle - 使用 GROUP BY 和 HAVING COUNT(*) >1 选择重复和非重复字段
- angular - 为什么我们有组件时还需要服务?
- jquery - 单个数据表上的不同函数和变量
- python - 设置步长极坐标图matplotlib python