You can get a std::wstring (using wide characters) out of a System.String pretty easily. You need to get the characters, pin them down, then construct a wstring from them.
Code:
System::String *netstr; // Fill with data.
wchar_t characters __gc[] = netstr->ToCharArray();
wchar_t __pin *pinner = &characters[0];
std::wstring wstr(pinner, netstr->get_Length());
Getting a std::string is trickier, because you also need to convert the unicode characters to a mbcs representation. You have two options.
1) You can use the code above and then convert the characters in native code.
2) You can convert the characters in managed code resulting in a byte array, and then use the technique above to get a char __pin* from the byte array and create a std::string from that. In that case, make sure you pass the length of the array as the length, not that of the string, as the string counts UTF-16 characters, which may differ from the number of bytes in whatever your local code page is. (Probably ISO-8859-1.)