Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;用变量double替换字符串的一部分_C++_String - Fatal编程技术网

C++ C++;用变量double替换字符串的一部分

C++ C++;用变量double替换字符串的一部分,c++,string,C++,String,我发现错误是: \u Mycont CXX0030:错误:表达式无法计算,\u mynextite CXX0030:错误:表达式无法计算,但我仍然不知道如何修复 这个程序使用字符串提示符,用5.651替换“{0}”,用3.427替换“{1}”,运行良好 但是,当我将字符串更改为“{0:c}”和“{1:c}”以替换子字符串并将其格式化为货币时,“{0:f}”和“{1:f}”将替换子字符串并将其格式化为定点表示法,“{0:e}”和“{1:e}”将替换子字符串并将其格式化为科学表示法,“{0:I}”和

我发现错误是:

\u Mycont CXX0030:错误:表达式无法计算,\u mynextite CXX0030:错误:表达式无法计算,但我仍然不知道如何修复

这个程序使用字符串提示符,用5.651替换“{0}”,用3.427替换“{1}”,运行良好

但是,当我将字符串更改为“{0:c}”和“{1:c}”以替换子字符串并将其格式化为货币时,“{0:f}”和“{1:f}”将替换子字符串并将其格式化为定点表示法,“{0:e}”和“{1:e}”将替换子字符串并将其格式化为科学表示法,“{0:I}”和“{1:I}”要替换子字符串并舍入为整数,它们都独立工作

但是当我试着把它们放在if({0})、else if({0:c})这样的情况下,它只在我寻找“{0}”任何其他不起作用的东西时才起作用。我得到一个调试错误。我该如何解决这个问题,我做错了什么?提前谢谢

void main()
{
    write("The number {0} is greater than {1}.\n", 5.651, 3.427);
}

void write(string prompt, ...)
{
    double small, large, temp;

    va_list arguments;
    va_start(arguments, prompt);

    large = va_arg(arguments, double);
    small = va_arg(arguments, double);
    if(small > large)
    {
        temp = large;
        large = small;
        small = temp;
    }

    if(prompt.find("{0}"))
    {
        ostringstream a;
        a << large;
        string arg1 = a.str();
        ostringstream s;
        s << small;
        string arg2 = s.str();

        size_t pos = prompt.find("{0}");
        prompt = prompt.replace(pos, 3, arg1);
        size_t pos2 = prompt.find("{1}");
        prompt = prompt.replace(pos2, 3, arg2);
    }

    else if(prompt.find("{0:c}"))
    { 
        ostringstream a;
        a << large;
        string arg1 = "$" + a.str();
        ostringstream s;
        s << small;
        string arg2 = "$" + s.str();

        size_t pos = prompt.find("{0:c}");
        prompt = prompt.replace(pos, 5, arg1);
        size_t pos2 = prompt.find("{1:c}");
        prompt = prompt.replace(pos2, 5, arg2);
    }

    else if(prompt.find("{0:e}"))
    { 
        ostringstream a;
        a << scientific << large;
        string arg1 = a.str();
        ostringstream s;
        s << scientific << small;
        string arg2 = s.str();

        size_t pos = prompt.find("{0:e}");
        prompt = prompt.replace(pos, 5, arg1);
        size_t pos2 = prompt.find("{1:e}");
        prompt = prompt.replace(pos2, 5, arg2);
    }

    else if(prompt.find("{0:f}"))
    { 
        ostringstream a;
        a << fixed << setprecision(6) << large;
        string arg1 = a.str();
        ostringstream s;
        s << fixed << setprecision(6) << small;
        string arg2 = s.str();

       size_t pos = prompt.find("{0:f}");
       prompt = prompt.replace(pos, 5, arg1);
       size_t pos2 = prompt.find("{1:f}");
       prompt = prompt.replace(pos2, 5, arg2);
    }

    else if(prompt.find("{0:i}"))
    { 
        ostringstream a;
        a << (int)large;
        string arg1 = a.str();
        ostringstream s;
        s << (int)small;
        string arg2 = s.str();

        size_t pos = prompt.find("{0:i}");
        prompt = prompt.replace(pos, 5, arg1);
        size_t pos2 = prompt.find("{1:i}");
        prompt = prompt.replace(pos2, 5, arg2);
    }

    cout << prompt;
    cout << endl;

    va_end(arguments);
}
void main()
{
写入(“数字{0}大于{1}.\n”,5.651,3.427);
}
无效写入(字符串提示,…)
{
双倍小,大,温度;
va_列表参数;
va_开始(参数、提示);
大=va_arg(参数,双精度);
small=va_arg(参数,双精度);
如果(小>大)
{
温度=大;
大=小;
小=温度;
}
if(prompt.find(“{0}”))
{
ostringstream a;
a您的“if”条件中的表达式没有执行您认为它正在执行的操作。请参阅

返回值

第一个匹配项的第一个字符的位置。如果未找到匹配项,则函数返回string::npos

那么这个

if(prompt.find("{0}"))
应该是

if(prompt.find("{0}") != string::npos)

如果使用find查找的字符串文本未找到,find返回不等于零的string::npos,因此If计算结果为true,这不是您想要的。同样,对于使用find的所有其他If条件程序的工作方式与现在相同,但主要是如果我改变,写(“数字{0}大于{1}.\n”,5.651,3.427);写(“数字{0:c}大于{1:c}.\n”,5.651,3.427);例如,该程序对任何人都不起作用?我不确定我的问题出了什么问题。您没有阅读所用函数的文档。您也没有将问题缩小到一个可能会向您揭示问题的小测试用例(即,您没有调试).我确实做了调试,得出了与meSo下面的人相同的答案,那你为什么要问?这就是为什么你得到了反对票!是的,我做了一些调试,最后得出了相同的结论。谢谢anyway@JoaoDias很高兴您自己解决了这个问题,欢迎使用编程和stackoverflow