私はいくつかのプログラミングの問題を練習していて、人気のある「文字列内の逆の単語」の問題をコーディングしようとしました。
私はCで自分のコードを考え出そうとしました。部分的に正しくすることができます。つまり、「helloworld」は「worldolleh」になります。バグはここにあるのだろうかと思います。どこかで1つのバグを作成していると思います。
なるべくライブラリ関数を使わずにやりたかったのです。ここでこの問題を検索して多くの解決策を見つけましたが、なぜ私の解決策が機能しないのか知りたいです。
コードは次のとおりです。
#include <stdio.h>
#include <string.h>
void reverse(char*, int);
int main(int argc, char **argv)
{
char st[]= "hello world";
int len = strlen(st);
int i=0,j=0;
reverse(st,len-1); // Reverse the entire string. hello world => dlrow olleh
while(st[j]){ //Loop till end of the string
if ( *(st+j) == ' ' || *(st+j) == '\0' ) { //if you hit a blank space or the end of the string
reverse(st+i,j-1); // reverse the string starting at position i till position before the blank space i.e j-1
i=++j; //new i & j are 1 position to the right of old j
}
else {
j++; //if a chacacter is found, move to next position
}
}
printf("%s",st);
return 0;
}
void reverse(char *s, int n)
{
char *end = s+n; //end is a pointer to an address which is n addresses from the starting address
char tmp;
while (end>s) //perform swap
{
tmp = *end;
*end = *s;
*s = tmp;
end--;
s++;
}
}
ありがとうございました!
更新:@Daniel Fischerの回答に基づいて、正しい実装は次のとおりです:http: //ideone.com/TYw1k