你能将原始字符串修饰符R“()”与字符串变量结合起来吗?

时间:2017-06-01 18:45:43

标签: string c++11 string-literals

实施例

例如:

 public async Task<bool> LaunchFile(string fname, string mimeType)
        {
            var uri = Android.Net.Uri.Parse("file://" + fname );
            var intent = new Intent(Intent.ActionView);
            intent.SetDataAndType(uri, mimeType);

            intent.SetFlags(ActivityFlags.ClearWhenTaskReset | ActivityFlags.NewTask | ActivityFlags.GrantReadUriPermission );

            try
            {
                Forms.Context.StartActivity(Intent.CreateChooser(intent, "ChooseApp"));
                return true;
            }
            catch (Exception ex)
            {
                Debug.WriteLine("LaunchFile: " + ex.Message);
                return false;
            }

产生以下内容:string MyString = "Normal\tString"; cout << MyString << endl;

原始字符串修饰符附加到字符串中,如下所示:

"Normal    String"

产生以下内容:string MyString = R"(Normal\tString)"; cout << MyString << endl;

问题

有没有办法将原始字符串修饰符附加到包含字符串的变量中,以便打印变量中包含的字符串的原始形式?

"Normal\tString"

所以你得到:string TestString = "Test\tString"; cout << R(TestString) << endl;

3 个答案:

答案 0 :(得分:3)

  

有没有办法将原始字符串修饰符附加到包含字符串的变量,以便打印变量中包含的字符串的原始形式?

没有

但是,您可以编写一个函数,用适当的字符串替换转义序列定义的字符,即用字符串'\t'替换字符"\\t"

示例程序:

#include <iostream>
#include <string>

// Performs only one substitution of \t.
// Needs to be updated to do it for all occurrences of \t and
// all other escape sequences that can be found in raw strings.    
std::string toRawString(std::string const& in)
{
   std::string ret = in;
   auto p = ret.find('\t');
   if ( p != ret.npos )
   {
      ret.replace(p, 1, "\\t");
   }

   return ret;
}

int main()
{
   std::string TestString = "Test\tString";
   std::cout << toRawString(TestString) << std::endl;
}

输出:

Test\tString

答案 1 :(得分:1)

此问题被标记为C ++ 11,在这种情况下,滚动自己的转换函数可能是最好的选择。

但是,如果您具有C ++ 14编译器,则可以使用List<T>流操纵器:

std::quoted

答案 2 :(得分:0)

种类。这可行,但这不是一个很好的解决方案:

std::string strToInsert = " insert this "
std::string myRawString = R"(
raw string raw string raw string
raw string raw string raw string
)"; myRawString += strToInsert; myRawString += R"(raw string
raw string raw string raw string
)";