使用C反转字符串中的每个单词

时间:2016-02-08 03:27:32

标签: c arrays string char reverse

好的,所以这段代码几乎可以工作,只会弄乱每一行的结尾。 例如,如果我的stdin是一个带有这三行的文本文件:

This is a test
For you to see
How this code messes up

输出读数:

siht si a
tsetroF uoy ot
eeswoH siht edoc sessem
pu

如果你抓到任何东西,请告诉我 感谢

void reverse(char *beg, char *end)
{
  while (beg<end)
  {
    char temp = *beg;
    *beg++ = *end;
    *end-- = temp;
  }
}


void reverseWords(char *str)
{
  char *beg = NULL;
  char *temp = str;
  while (*temp)
  {
    if ((beg == NULL) && (*temp != ' '))
    {
      beg = temp;
    }
    if (beg && ((*(temp + 1) == ' ') || (*(temp + 1) == '\0')))
    {
      reverse(beg, temp);
      beg = NULL;
    }
  temp++;
  }
}

1 个答案:

答案 0 :(得分:1)

不考虑代码中的新行。

在下面的代码中,我已将*something == ' '的所有出现更改为对新添加的方法isWhiteSpace的调用,如果要检查的字符是空格,则返回true选项卡,换行符或回车符:

void reverse(char *beg, char *end)
{
  while (beg<end)
  {
    char temp = *beg;
    *beg++ = *end;
    *end-- = temp;
  }
}

int isWhiteSpace(char value)
{
  return value == ' ' || value == '\t' || value == '\r' || value == '\n';
}


void reverseWords(char *str)
{
  char *beg = NULL;
  char *temp = str;
  while (*temp)
  {
    if ((beg == NULL) && !isWhiteSpace(*temp))
    {
      beg = temp;
    }
    if (beg && (isWhiteSpace(*(temp + 1)) || (*(temp + 1) == '\0')))
    {
      reverse(beg, temp);
      beg = NULL;
    }
  temp++;
  }
}