【问题标题】:How to convert int to string in a ternary operation如何在三元运算中将int转换为字符串
【发布时间】:2021-11-27 14:17:03
【问题描述】:

当尝试使用整数和字符串进行三元运算时,例如:

for (int num = 0; num < 100; num++) {
    cout << (i % 10 == 0) ? "Divisible by 10" : num;
}

您最终会遇到以下异常

E0042:操作数类型不兼容(“const char*”和“int”)

如果您尝试通过执行(const char*)numnum 转换为const char*,您最终会遇到访问冲突。 如果你改用(const char*)num&amp;,你会得到与该值对应的ASCII字符。

对于大于 10 的数字,如何快速将该整数转换为字符串? (最好在同一行)

【问题讨论】:

  • cout &lt;&lt; (i % 10 == 0) ? std::string("Divisible by 10") : std::to_string(num); 或者因为"Divisible by 10" 可以转换为std::stringcout &lt;&lt; (i % 10 == 0) ? "Divisible by 10" : std::to_string(num);
  • 抛弃三元运算符并使用 if 语句。 if (i % 10) std::cout &lt;&lt; num; else std::cout &lt;&lt; "Divisible by 10";
  • 无论如何它都会被转换为某种“字符串”,所以我只会在遇到实际性能问题并且知道(通过分析)这个函数是原因时才考虑寻找更快的东西
  • 有没有更快的方法来做到这一点,也许不使用字符串?你有没有分析一个优化的构建每种方式需要多长时间?这是确定性能影响的最佳方式。
  • @Keegan:在性能方面击败 std::string 是多么困难,您会惊讶。例如,std::string( "Divisible by 10" ) 不太可能首先使用任何动态内存分配。

标签: c++ string casting type-conversion conditional-operator


【解决方案1】:

如果你坚持使用条件运算符,你可以这样写:

for (int num = 0; num < 100; num++) {
    (num%10==0) ? std::cout << "Divisible by 10" : std::cout << num;
}

如果您想保留自己的值,则需要将值转换为一些兼容的类型。没有办法解决这个问题。条件运算符不是 if-else 语句的等效替代品,而且后者通常更清晰:

for (int num = 0; num < 100; num++) {
    if (num%10==0) { std::cout << "Divisible by 10"; }
    else { std::cout << num; }
}

对于大于 10 的数字,如何快速将该整数转换为字符串? (最好在同一行)

std::to_string 可以将数字转换为字符串。


PS:为了说明无法使用if-else 并且条件运算符实际上有用的示例,请考虑初始化引用。你不能写:

int x = 0;
int y = 0;
int& ref;    // nope, error
if (condition) ref = x;   
else ref = y;

但你可以写:

int& ref = (condition) ? x : y;

在其他情况下条件运算符也很有用。与if-else相比,它的目的不仅仅是节省一行代码。

【讨论】:

  • 超级有帮助,谢谢!
【解决方案2】:

要在同一行中执行此操作,请尝试:

for (int num = 0; num < 100; num++) {
    cout << (num % 10 == 0 ? "Divisible by 10" : to_string(num)) << endl;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-21
    • 2015-02-07
    • 2020-05-29
    • 2017-04-25
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 2021-02-22
    相关资源
    最近更新 更多