C++ 如何将字符串转换为long
我找到的所有解决方案似乎都使用了Atol,但在我有字符串的情况下,它使用char。例如,我读取一个输入$100,将其放入一个字符串中,并检查第一个字符是否为$。然后我需要将子字符串转换为long类型C++ 如何将字符串转换为long,c++,string,long-integer,substr,C++,String,Long Integer,Substr,我找到的所有解决方案似乎都使用了Atol,但在我有字符串的情况下,它使用char。例如,我读取一个输入$100,将其放入一个字符串中,并检查第一个字符是否为$。然后我需要将子字符串转换为long类型 int main() { long long price; string priceStr; cin>>priceStr; if (priceStr[0] == '$') { price = convertToLongLong(pric
int main() {
long long price;
string priceStr;
cin>>priceStr;
if (priceStr[0] == '$') {
price = convertToLongLong(priceStr.substr(1));//how?
}else{
cerr<<"error!";
}
}
intmain(){
多头价格;
字符串priceStr;
cin>>价格;
如果(priceStr[0]='$'){
price=convertToLongLong(priceStr.substr(1));//如何?
}否则{
cerr使用
scanf($%lld,&价格)
编辑
请参阅上面的参考资料。快速简便地格式化输入
if(scanf("%lld %s $%lld #%lld",
&id, name, &price, &quantity)!=4) fprintf(stderr, "error!");
如果STL是您唯一的选择,您有两个选择:
int main() {
long long price;
string priceStr;
cin>>priceStr;
if (priceStr[0] == '$') {
std::istringstream is (priceStr.begin() + 1, priceStr.end());
is >> price;
if (!is)
cerr << "fail!" << endl;
}else{
cerr<<"error!";
}
}
intmain(){
多头价格;
字符串priceStr;
cin>>价格;
如果(priceStr[0]='$'){
istringstream是(priceStr.begin()+1,priceStr.end());
是>>价格;
如果(!is)
cerr读取文档中的字符串
有一种非常明显的方法可以从其中的std::string获取char*尝试使用stoll
请参阅
我从未尝试过这个无论你做什么,都不要使用它。你怎么知道这个数字是0还是遇到了错误?有stoll
、strtoll
、字符串流、boost::lexical\u cast
,以及其他都提供错误检查的功能……你不需要long
来存储100,我只是以100为例…@ValekHalfHeartHi@chris例如,如果我使用strtoll,它接受(const char*str,char**endptr,int base),但我只有一个字符串,那我该怎么办?谢谢。@Arch1tect,std::string
的文档清楚地列出了c_str()
和data()
。注意1.这是c风格,2.这不是类型安全的,3.以上所有内容。但它又快又脏;)非常感谢我现在使用你的第一个方法,并将priceStr.begin()+1,priceStr.end()更改为priceStr.substr(1)你也应该处理另一个cin
流式操作的故障if(std::cin>>priceStr)…否则…;
。按原样,您可以访问空字符串上的[0]
——未定义的行为——然后可能尝试构造一个开始迭代器已超过结束迭代器的字符串。Tony D,这就是我注意到没有边界检查的原因。
int main() {
long long price;
string priceStr;
cin>>priceStr;
if (priceStr[0] == '$') {
price = boost::lexical_cast<long long>(&*priceStr.begin() + 1, priceStr.size() -1); // throws if it cannot convert.
}else{
cerr<<"error!";
}
}