c - 字符串反转 C 中的逻辑错误

标签 c string loops

输入:你好,男孩(任意 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/

相关文章:

c++ - 如何填写全局偏移表?

string - LISP- 从字符串中删除元音

r - 在 For 循环中存储值

c++ - 如何离开循环

c - 表达式中的括号是否先于其他任何内容求值?

c - 为什么我的 C 行数不起作用?

c++ - 添加多个字符串值

c# - 将字符串解析为具有范围的整数列表

c# - 在 foreach 循环内的开关嵌套中使用 `continue` 关键字

关于c语言中oop特性的困惑,我的声明证明c中也有很多oop特性