我想知道以下代码是否为"有效":
#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)
。