C++ C++;:为什么我的字符串没有打印出来?
我正在尝试将时间从12小时格式转换为24小时格式。这是我试图解决的黑客问题。这是我的密码:-C++ C++;:为什么我的字符串没有打印出来?,c++,string,C++,String,我正在尝试将时间从12小时格式转换为24小时格式。这是我试图解决的黑客问题。这是我的密码:- #include <bits/stdc++.h> using namespace std; string timeConversion(string s) { string r; int hh,mm,ss; hh = (s[0]-'0')*10+(s[1]-'0'); mm = (s[3]-'0')*10+(s[4]-'0'); ss = (s[6
#include <bits/stdc++.h>
using namespace std;
string timeConversion(string s) {
string r;
int hh,mm,ss;
hh = (s[0]-'0')*10+(s[1]-'0');
mm = (s[3]-'0')*10+(s[4]-'0');
ss = (s[6]-'0')*10+(s[7]-'0');
if(hh<12 && s[8] == 'P') hh +=12;
if(hh == 12 && s[8]=='A') hh = 0;
r[0]=hh/10+'0';
r[1]=hh%10+'0';
r[2]=':';
r[3]=mm/10+'0';
r[4]=mm%10+'0';
r[5]=':';
r[6]=ss/10+'0';
r[7]=ss%10+'0';
r[8]='\0';
return r;
}
int main() {
string s;
cin >> s;
string result = timeConversion(s);
cout << result << endl;
return 0;
}
#包括
使用名称空间std;
字符串时间转换(字符串s){
字符串r;
内高,毫米,不锈钢;
hh=(s[0]-'0')*10+(s[1]-'0');
mm=(s[3]-'0')*10+(s[4]-'0');
ss=(s[6]-'0')*10+(s[7]-'0');
如果(hh>s;
字符串结果=时间转换;
看
操作员[]
未执行边界检查。如果pos>size()
,则行为未定义
定义string r
时,其size()
为零,因此所有字符分配都是未定义的行为。您可能需要首先:
或者,一个接一个地:
r = "";
r.push_back(hh/10+'0');
r.push_back(hh%10+'0');
r.push_back(':');
r.push_back(mm/10+'0');
r.push_back(mm%10+'0');
r.push_back(':');
r.push_back(ss/10+'0');
r.push_back(ss%10+'0');
// This isn't necessary
// r.push_back('\0');
使用operator+=
使代码看起来更自然:
r = "";
r += hh/10+'0';
r += hh%10+'0';
r += ':';
r += mm/10+'0';
r += mm%10+'0';
r += ':';
r += ss/10+'0';
r += ss%10+'0';
// This isn't necessary
// r += '\0';
注意,您不需要终止零,因为std::basic_string
不是以null结尾的(它不是C样式的字符串).r
的大小为0
。您从不在r
中添加任何字符。无关:#include使用命名空间std;
是一种危险的组合。第一种组合几乎包括整个标准库。她将刚刚包含在全局命名空间中的成千上万个标识符放在第二位l与您声明的任何标识符竞争。这可能会导致极其神秘的错误消息和非常奇怪的运行时行为,因为您甚至不知道存在的东西会被使用,而不是您原本打算使用的。请非常小心地使用,不要这样做。或者使用+=
使其更自然。此外,您不需要这样: r=”“;
。字符串默认为空。而且,您也不需要:r+='\0';
。std::string
不需要以NULL结尾。@NikosC。OP的代码添加了一个终止零。是的,但指出答案中的错误和/或错误假设是个好主意。@NikosC。找到您了。添加了它
r = "";
r += hh/10+'0';
r += hh%10+'0';
r += ':';
r += mm/10+'0';
r += mm%10+'0';
r += ':';
r += ss/10+'0';
r += ss%10+'0';
// This isn't necessary
// r += '\0';