为什么 std::大写不适用于字符串?
Why std::uppercase doesn't work with strings?
我已经使用了一段时间,却没有完全了解它们的工作方式。
此代码:
std::cout << std::hex << std::showbase;
std::cout << std::uppercase << 77 << 'n';
std::cout << std::nouppercase << 77 << 'n';
或其他方式:
std::cout << std::hex;
std::cout << std::setiosflags(std::ios::showbase | std::ios::uppercase) << 77 << 'n';
std::cout << std::nouppercase << 77 << 'n';
两者都输出以下内容:
0X4D // 'X' and 'D' uppercase
0x4d // 'x' and 'd' lowercase
但是,以下代码几行都无法将字符串的" ABCD"转换为大写。为什么?
std::cout << std::uppercase << "abcd" << 'n';
std::cout << std::setiosflags(std::ios::uppercase) << "abcd" << 'n';
另一个问题是,为什么showbase
和uppercase
必须在std::setiosflags()
内使用std::ios::
,并且仅在该功能外部使用std::
?
finaly,为什么在std::setiosflags()
中无法接受std::hex
谢谢
阅读std::uppercase
的文档。
启用在浮点和十六进制整数输出中使用大写字符。
std::ios_base::hex
被std::setiosflags
接受。
这是std::uppercase
的示例:
#include <iostream>
int main()
{
std::cout << std::hex << std::showbase
<< "0x2a with uppercase: " << std::uppercase << 0x2a << 'n'
<< "0x2a with nouppercase: " << std::nouppercase << 0x2a << 'n'
<< "1e-10 with uppercase: " << std::uppercase << 1e-10 << 'n'
<< "1e-10 with nouppercase: " << std::nouppercase << 1e-10 << 'n';
}
这是std::setiosflags
的示例:
#include <iostream>
#include <iomanip>
int main()
{
std::cout << std::resetiosflags(std::ios_base::dec)
<< std::setiosflags( std::ios_base::hex
| std::ios_base::uppercase
| std::ios_base::showbase) << 42 << 'n';
}
定义:
std::hex
定义为std::ios_base& hex( std::ios_base& str );
std::ios_base::hex
定义为static constexpr fmtflags hex = /*...*/;
std::uppercase
仅影响转换为十六进制的结果。
std::hex
是一个操纵对象,而setiosflags
期望通过组合单个位形成的整数。或者,更确切地说,一种以这种方式行为的类型。而不是std::hex
(类型错误),您可以使用std::ios_base::hex
。
我想加2美分。我在代码开头写这2行,以使生活更轻松:
const long base = std::ios::showbase;
const long upper = std::ios::uppercase;
随后使用常数而不是乏味的代码。
相关文章:
- OpenGL - 在 NDC 中计算位置适用于着色器,但不适用于'regular'程序
- 使用模板参数重载C++方法:如何使其适用于模板的子类?
- 如何修复我的最大公约数代码?它适用于除零和零以外的所有数字
- 选择排序C++(已修改)并非适用于所有情况
- 无法让"std::enable_if"适用于无作用域枚举
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- 确定夏令时是否适用于特定日期
- 是否有一种 STL 算法可以最后找到,但它也适用于指针?
- QT 样式表主题,适用于使用属性选择器的整个应用程序
- C++带有适用于左值和右值的引用参数的函数
- 代码适用于调试,但不适用于发布
- 为什么哈希<常量字符*>适用于字符串而不是字符串变量?
- 如何在 C++ 中安全地为 char *array 重新分配内存(它适用于自定义字符串类)
- 为什么 fstream.open(文件名) 适用于文字而不是生成的字符串?
- 适用于短文件名的最佳字符串哈希函数
- 强制转换 c_str() 仅适用于短字符串
- C++:二叉搜索树适用于整数,但当我尝试传递字符串时崩溃
- CopyFile 不适用于环境字符串,但仅适用于放置文件的标准目录。无论如何要克服这个?
- 从字符串中删除重复字符的函数仅适用于相邻字符
- 中的方法<cstring>也适用于字符串类吗?