特定の文字列を逆にしようとしていますが、すでに完全に逆にしていますが、読みやすいように各単語を逆にする必要があります。
例: 入力:Reverse this string.
現在の出力:.gnirts siht esreveR
望ましい出力:string. this Reverse
特定の単語ごとに文字列反転関数を再度実行する方法はありますか?
特定の文字列を逆にしようとしていますが、すでに完全に逆にしていますが、読みやすいように各単語を逆にする必要があります。
例: 入力:Reverse this string.
現在の出力:.gnirts siht esreveR
望ましい出力:string. this Reverse
特定の単語ごとに文字列反転関数を再度実行する方法はありますか?
文字列の開始オフセットと終了オフセットを受け入れる逆関数がある場合:
void rstr(char *s, int start, int end) {
/* ... */
}
int main(){
char str[] = "this is a sentence of words";
int i, p;
rstr(str, 0, strlen(str));
for (p = i = 0; i <= strlen(str); i++) {
if (str[i] == ' ' || i == strlen(str)) {
rstr(str, p, i);
p = i + 1;
}
}
printf("%s\n", str);
return 0;
}
strtokの各結果に対して、逆アルゴリズムを再度実行します
char* token = strtok(str, ' ');
while (token)
{
reversedWord = YourReverseAlgorithm(token);
token = strtok(0, ' ');
}
strtokを呼び出すたびに、区切り文字(この場合は'')までの元の文字列のトークンが提供されます。シンプルな簡潔さ、そして動作します。