2016-02-11 1 views
1

Я ищу, чтобы перегрузить функцию sqrt следующим образом, чтобы она могла принимать строку в качестве аргумента и возвращать строку.Функция перегрузки sqrt для параметра строки

std::string sqrt(std::string b){ 
//do something 
} 

Возможно ли это на C++? Если это так, мой синтаксис неверен?

ответ

1

Это прекрасно, если ваша функция правильно интерпретирует строку. Пример:

#include <iostream> 
#include <string> 
#include <cmath> 

std::string sqrt(std::string b) 
{ 
    return std::to_string(std::sqrt(std::stoi(b))); 
} 

int main() 
{ 
    std::string input = "625"; 
    std::string output = sqrt(input); 
    std::cout << output; 
} 

Live on Coliru

Синтаксис правильно, но вы можете передать строку с помощью const ссылки, так что вы не создать копию в случае, если ваша строка является именующей (для rvalues, перемещение будет выполнено при использовании C++ 11).

+0

Но что это, например, я хочу сделать что-то совершенно не связанное с квадратным корнем и просто вызвать функцию sqrt? 1.e, возьмите строку и верните строку в обратном порядке. – potatosoup

+0

@potatosoup Вы можете делать все, что хотите внутри функции. Приведенный выше пример преобразует строку в целое число и берет ее квадратный корень. Конечно, вы можете сделать что-то еще, но вызов функции 'sqrt' не будет иметь особого смысла и путает других, кто может читать ваш код. – vsoftco

+0

Функция должна обрабатывать случай параметров «банан» и «морковь». Ни один из них не является квадратным, но, по крайней мере, морковь является корнем. –

1

Если вы знаете, что строка представляет собой double, то вы могли бы использовать:

#include <string> 
#include <cmath> 

std::string sqrt(const std::string& b) 
{ 
    return std::to_string(std::sqrt(std::stod(b))); 
} 

Аналогично, если вы знаете, что строка представляет int использование std::stoi вместо этого.