输入:你好,男孩(任意 80 个字符的字符串)
预期输出:boy there Hello
当前输出:(没有任何内容 - 虽然可以编译)\
我的硬件提示:
编写一个程序,提示用户输入由一个或多个空格分隔的一系列单词,其中每个单词都是一系列字母数字字符。您可以假设输入的文本字符串长度不超过 80 个字符,每个单词长度不超过 20 个字符。使用 fgets() 命令读取输入文本字符串。比如我们可以声明一个char数组char语句[81];然后使用 fgets(sentence,81,stdin);从标准输入stdin(即键盘输入)读入最多80个字符到字符数组sentence[]中,这也会在数组末尾插入一个空字符(字符串终止符);这就是为什么数组需要比输入的文本长一个字节的原因。您的程序应该以相反的顺序打印单词,与输入的顺序完全相同,每个单词之间只有一个空格。您可以假设没有输入标点符号或控制字符。您的程序应命名为reverse_words.c,并且您的输出应与以下示例所示的输出完全匹配。
我已经看过其他示例,只是尝试使用我所知道的来制作这个程序。对我来说,这似乎有效,但事实并非如此。有人可以帮我找到我的逻辑错误的地方吗?
#include <stdio.h>
int main()
{
char sentence[81];
char space[81];
int i , h = 0, j, start;
printf("Enter a sentance (up to 80 characters): ");
fgets(sentence,81,stdin);
//starting backwards go from element 80 to find first non space
//make array to store element numbers of sentence in new array
for(i = 80; i >= 0; i--)
{
if(sentence[i] != ' ' || sentence[i] != '\0')
{ start = i;
//printf("%i", start);
}
if(i < start && i == ' ')
{
space[h] = i;
h++;
}
}
h = 0;
//start at first space and print characters till next space, repeat till all words printed
for( j = space[h]; j < space[h + 1]; h++)
{
printf("%c", sentence[j]);
if (j == space[h + 1])
printf(" ");
}
return 0;
}
最佳答案
粗略一看
if(i < start && i == ' ')
更改为
if(i < start && sentence[i] == ' ')
您可以改进的其他方面:
不要从 80 开始循环,而是找到输入字符串的长度,然后倒退。使用strlen
关于c - 字符串反转 C 中的逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13339603/