在相同的代码中使用C-strings和STD :: String
Using c-strings and std::string in the same code
我想知道以下代码是否为"有效":
#include <iostream>
using namespace std;
int main(void) {
string s="Hello World!n";
for (int i=0;i<s.size();++i) {
for (int j=0;j<s[i];++j) {
cout << "+";
}
cout << ".>n";
}
}
我制作了此代码,但我不知道是否应该添加一些" .c_str",否则使其更好。
多亏了所有贡献,我现在可以说我的代码在C 中是有效的,因为[]运算符是字符串类的一部分。此外,可以添加
for (char c : s) {
for (int j = 0; j != c; ++j) {
/*..*/
}
}
是
的缩写for (int i = 0; i < s.size(); ++i) {
for (int j = 0; j < s[i]; ++j) {
/*..*/
}
}
谢谢大家!
此代码有一个潜在的问题:
for (int j=0;j<s[i];++j) {
值s[i]
是char
,它可能是签名类型。如果字符值为负,则此循环导致不确定的行为,因为j
的最终溢出。
在ASCII系统上,此精确代码不包含负字符,但是在EBCDIC中,Newline是0x85
,如果系统具有纯char为signed
。
要在安全的一侧,应该是for (int j = 0; j < (unsigned char)s[i]; ++j)
。或在基于范围的版本中,使用for (unsigned char c: s)
。
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- std::具有相同基类的类的变体
- std::向量与传递值的动态数组
- 使用std::vector的OpenCL矩阵乘法
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- std::condition_variable::wait()如何评估给定的谓词
- 如何获取std::result_of函数的返回类型
- std::原子加载和存储都需要吗
- 将对象移动到std::shared_ptr
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 使用一个考虑到std::map中键值的滚动或换行的键
- 功能采用variadic模板包将std :: strings转换为const char *
- 在相同的代码中使用C-strings和STD :: String
- 如何在 C# 中使用 Swig 包装 UTF-8 编码C++ std::strings
- 如何在 std::vector 中查找重复项<strings>并返回一个 std::list 它们按字母顺序排序,在该结果列表中没有重复项