-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 によって保持されているアドレスと等しくないことを確認しているためです。最初の単語の条件が false になるためです。目的の出力が得られるように条件を変更してください。

4

4 に答える 4

2

while ループを do.. while ループに変更します。

@ashrafi イクバル

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

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 に答える
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セグメンテーション違反を要求しています。
  • NULLかどうかをチェックする*qのは悪いスタイルです。strlen代わりに使用してください。
于 2013-03-07T06:53:15.397 に答える