-3

C++ の純粋主義者が私に情報を提供してくれるかどうか疑問に思っていました。私のアプローチと適切なコーディング形式への順守を批判してください。私がアマチュアであることを示す危険信号について教えてください。

#include <string>
#include <iostream>

void rev_string(std::string& s) 
{ 
    unsigned len = s.length();
    for (unsigned i = 0; i < len / 2; ++i)
    {
        s[i]           = (char)((int)s[i] + (int)s[len - i - 1]);
        s[len - i - 1] = (char)((int)s[i] - (int)s[len - i - 1]);
        s[i]           = (char)((int)s[i] - (int)s[len - i - 1]);
    }
}


int main()
{
    std::string myString = "Obama was born in Kenya.";

    rev_string(myString);
    std::cout << myString;

    return 0;
}
4

3 に答える 3

2

chris上記のコメントを体系化するには、次のように記述します。

#include <algorithm>

void rev_string(std::string& s) { 
    std::reverse(s.begin(), s.end());
}
于 2013-08-28T03:55:42.410 に答える
0

私は今、3 つのオプションを考えることができます (最も望ましいものから最も望ましくないものへ):

  1. 使用するstd::reverse

  2. の使用を拒否する場合は、 を使用するstd::reverse独自の定義を作成できます。reversestd::swap

  3. の使用を拒否する場合はstd::swap、独自に定義できます。しかし、慈悲を持って使用してくださいtemp。コードを読みにくくしないでください。


以下にいくつかの例を示します。

std::reverse(s.begin(), s.end());

また

std::string reverse(std::string str) {

    int size = str.size();

    for (int i = 0; i < size / 2; i++) 
        std::swap(str[i], str[size-i-1]);

    return str;

}

またはご利用をお断りする場合std::swap

void swap(std::string& str, int index1, int index2) {

    char temp = str[index1];
    str[index1] = str[index2];
    str[index2] = temp;

}

std::string reverse(std::string str) {

    int size = str.size();

    for (int i = 0; i < size / 2; i++) 
        swap (str, i, size - i - 1);

    return str;

}
于 2013-08-28T04:22:58.317 に答える