0

我找到的所有解决方案似乎都使​​用了环礁,但是当我有一个字符串时它需要 char 。例如,我读取输入 $100,将其放入字符串并检查第一个字符是否为 $。然后我需要将子字符串转换为 long long 类型。

int main() {

    long long price;
    string priceStr;

    cin>>priceStr;
    if (priceStr[0] == '$') {
        price = convertToLongLong(priceStr.substr(1));//how?
    }else{
        cerr<<"error!";
    }

}

我的意见是:$100 谢谢!

编辑:也许我没有以正确的方式做到这一点。我的输入流是 ID 名称 $price #quantity ,如下所示,我需要所有数字都很长,并检查 $ 和 # 叹息是否在正确的位置:

1 台电视 $1500 #50

2 笔记本电脑 $2000 #30

4

4 回答 4

1

采用scanf

scanf("$%lld", &price);

编辑

参见上面的参考。格式化输入的快速简便的方法。

if(scanf("%lld %s $%lld #%lld",
  &id, name, &price, &quantity)!=4) fprintf(stderr, "error!");

否则,请参阅其他答案以获取更常见/标准的解决方案。

于 2013-03-29T02:32:30.743 回答
1

如果 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!";
    }
}

如果您可以使用 Boost:

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!";
    }
}

请注意,在第二个示例中没有边界检查,您肯定希望在执行上面显示的操作之前实现它。(即检查 priceStr.size() >= 2)。

正如其他人所建议的那样,您可以使用 的变体stoll,但请注意这些函数不能很好地报告错误,如果有的话。

于 2013-03-29T03:16:29.157 回答
0

阅读字符串http://www.cplusplus.com/reference/string/string/的文档

有一种非常明显的方法可以从那里的 std::string 获取 char*

于 2013-03-29T03:36:43.273 回答
0

尝试使用 stoll

请参考http://www.cplusplus.com/reference/string/stoll/

我从来没有试过这个

于 2015-12-29T07:24:40.507 回答