2
#include<iostream>
using namespace std;
void reverse(string &a,int i,int j)
{
char temp;
//j=j-1;
while(i<j)
{
    temp=a[i];
    a[i]=a[j];
    a[j]=temp;
    i++;
    j--;
}

}
void reversewords(string &a)
{
string b=a,c;
int i=-1,j=0;
while(j<a.length())
{
    if(i==-1 && a[j]!=' ' )
    {

        i=j;
    }
    if(a[i] && (a[j+1]==' ' || a[j+1]=='\0'))
    {

        reverse(a,i,j);
        i=-1;
    }
    j++;
}
reverse(a,0,a.length()-1);
//cout<<i<<" "<<j;
}
int main()
{
string a;
getline(cin,a);
reversewords(a);
cout<<a;
}

文字列内の単語の順序を逆にします。スタック オーバーフローの質問の 1 つを見て、上記のコードを実装しました。

さて、私の質問は、彼のテストケースのいくつかで失敗したことです

以下に示すいくつかのテストケースを正しく取得しました

1) 空の文字列。

2) スペースが 1 つだけの文字列。元: " "。

3) 単語間に複数のスペースがある文字列。

4) 先頭にスペースを含む文字列。シングルとマルチ。

5) 末尾にスペースを含む文字列。シングルとマルチ。

6) 大文字のみ、小文字のみの文字列

7) 英数字の文字列。

8) 手順 7 で特殊文字を含めます。

9) 回文である文字列。

10) 1文字のみの文字列。

12) 大文字と小文字を組み合わせた文字列。

13) 特殊文字のみの文字列。

私が失敗しているケースは

  1. 文字列に 3 つ以上のスペースが含まれている場合

スペースが 2 つある場合、余分な文字が出力されます。3 つ以上のスペースに対しても正しい出力を得るために必要な変更

4

1 に答える 1

0

文字が ' ' の後にフラグを追加するだけで、コードが新しい単語だと認識しないようにすれば、問題は解決するはずです。問題は、出力に空のスペースを印刷するかどうかだと思います。

于 2014-07-28T20:13:41.423 に答える