-1

逐字反转字符串的代码如下 -

#include<stdio.h>

int main()
{
    int i=0;
    char str[]="you are selected";
    char *q,*r,*s;
    q=str;
    while(*q!=NULL)
    {
        q++;
    }
    q--;
    s=q;
    while(q!=str) //i tried for q!=str-1 but its not working
    {
        if(*q==' ')
        {
            r=q+1;
            while(r!=s+1)
            {
            printf("%c",*r);
            r++;
            }
            printf(" ",*r);
            s=q-1;
        }
        q--;
    }
}

但问题是上面的代码没有打印第一个单词,因为在while循环的条件部分我正在检查字符串开头的地址不等于q持有的地址。因为对于第一个单词条件变为假。请修改条件,使其提供所需的输出。

4

4 回答 4

2

将while循环修改为do..while循环

@ashrafi iqbal

do
{
    if(*q==' ')
    {
        r=q+1;
        while(r!=s+1)
        {
        printf("%c",*r);
        r++;
        }
        printf(" ",*r);
        s=q-1;
    }
    q--;
}while(q!=str);

___编辑_ _

修改 if 条件为

if ((*q==' ') || (*q == str[strlen(str) - 1))
于 2013-03-07T06:48:35.117 回答
1

尝试这个:

while(1)
{
  if(q==str)
  {
    //Logic to print first word
    break;
  }
  if(*q==' ')
    {
        r=q+1;
        while(r!=s+1)
        {
        printf("%c",*r);
        r++;
        }
        printf(" ",*r);
        s=q-1;
    }
    q--;
}
于 2013-03-07T06:55:17.300 回答
0

while将您的循环修改为:

while(1)
{
    if(*q==' ' || q == str)
    {
        if(q == str)
            r = q;
        else
            r=q+1;

        while(r!=s+1)
        {
            printf("%c",*r);
            r++;
        }
        printf(" ",*r);

        if(q == str)
            break;

        s=q-1;
    }
    q--;
}

还,

  • str-1正在要求段错误。
  • 检查是否*q为 NULL 是不好的风格。改为使用strlen
于 2013-03-07T06:53:15.397 回答
0

在 for 循环之后添加以下行。这将处理前面没有空格的单词(即第一个单词)

#include<stdio.h>

int main()
{
    int i=0;
    char str[]="you are selected";
    char *q,*r,*s;
    q=str;
    while(*q!=NULL)
    {
        q++;
    }
    q--;
    s=q;
    while(q!=str) //i tried for q!=str-1 but its not working
    {
        if(*q==' ')
        {
            r=q+1;
            while(r!=s+1)
            {
            printf("%c",*r);
            r++;
            }
            printf(" ",*r);
            s=q-1;
        }
        q--;
    }
    r = q;
    while (*r != ' ' && *r != NULL)
    {
       printf("%c", *r);
       r++;
    }
}
于 2013-03-07T06:47:03.613 回答