Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I add to a wstring?

Tags:

c++

visual-c++

This works with std::string

std::string class::something(char* input) {
    std::string s(input);
    s = "hai! " + s;
    return s;
}

But fails if I try the same thing with wstring

std::wstring class::something(wchar_t* input) {
    std::wstring s(input);
    s = "hai! " + s;
    return s;
}

How do I do the same thing with std::wstring?

like image 842
codefrog Avatar asked Dec 03 '10 17:12

codefrog


People also ask

What is the difference between Wstring and string?

String overview std::string is used for standard ascii and utf-8 strings. std::wstring is used for wide-character/unicode (utf-16) strings. There is no built-in class for utf-32 strings (though you should be able to extend your own from basic_string if you need one).

What is a Wstring C++?

This function is used to convert the numerical value to the wide string i.e. it parses a numerical value of datatypes (int, long long, float, double ) to a wide string. It returns a wide string of data type wstring representing the numerical value passed in the function.

How do you convert Wstring to Lpcstr?

Simply use the c_str function of std::w/string . Save this answer.


1 Answers

The problem here is types. A wstring isn't a string, but a quoted string constant is related to it (it is generally a const char*), so

s = "hai! " + s;

is actually a problem.

The value "hai! " is of type const char*, not type const wchar_t*. Since const char* is a basic type, it's searching for a global operator+ that operates const char* and wstring, which doesn't exist. It would find one for const wchar_t* and wstring, because std::basic_string<T>, the template underyling type for both string and wstring (using char and wchar_t as the type parameter, respectively) also creates template methods for operator+ (const T*& s1, const basic_string<T> s2) so that addition can work.

Therefore, you need to make "hai! " a wstring:

std::wstring class::something(wchar_t* input){
    std::wstring s(input);
    s = L"hai! " + s;
    return s;
}

The L prefix on a string constant, in Visual C++, defines it to be "long", and therefore a wstring. wstring is actually basic_string<wchar_t>, which is, because of the behavior of C++ templates, a completely different type from basic_string<char> (a std::string), so you can't combine the two.

like image 139
Adam Norberg Avatar answered Sep 20 '22 01:09

Adam Norberg