c ++ istringstream()函数将字符串转换为int引发错误

时间:2013-09-02 09:11:41

标签: c++ istringstream

我有一串数字。我试图使用istringstream将其作为int类型打印在字符串中的每个数字。如果将整个字符串作为参数传递给main中的转换函数,它可以正常工作但如果我通过索引传递它,则会引发错误。

如何使用索引将此代码工作以将字符串数组中的每个数字作为int打印。

这是我的代码。

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int strToNum(string str)
{
    istringstream ss(str);
    int n;
    ss>>n;
    cout<<n;
}

int main()
{
string str = "123";
for(int i=0; i<str.length(); i++)
//strToNum(str);  Works fine
strToNum(str[i]); //raises error
}

5 个答案:

答案 0 :(得分:5)

str[i]char,而strToNum需要string,因此类型错误。

答案 1 :(得分:4)

它会引发错误,因为str[i]char

但是,strToNum(string str)除了string

试试这个:

for(int i=0; i<str.length(); i++)
  strToNum(string(1,str[i])); //Convert char to string

请参阅here

答案 2 :(得分:2)

其他人已经解释了你的错误。这就是你如何使它发挥作用:

strToNum( std::string(1, str[i]) );

但我会这样做:

for(int i=0; i<str.length(); i++)
    cout << str[i] - '0';

但问问自己是否真的需要这个。您对价值或代表感兴趣吗?如果是后者,只需打印char s。

答案 3 :(得分:1)

根本不需要istringstream。

int strToNum(char ch)
{
    cout << ch;
}

答案 4 :(得分:0)

实际上我使用模板函数来执行这个任务,这是一个更有用的方法来编写发起这个线程的函数(因为这个单个函数可以将字符串转换为任何类型的数字:int,float,double,long双):

#include "stdafx.h"
#include <string>
#include <iostream>
#include <Windows.h>
#include <sstream>
#include <iomanip> 
using namespace std;

template <typename T>
inline bool StrToNum(const std::string& sString, T &tX)
{
    std::istringstream iStream(sString);
    return (iStream >> tX) ? true : false;
}


void main()
{
    string a="1.23456789";
    double b;
    bool done = StrToNum(a,b);
    cout << a << endl;
    cout << setprecision(10) << b << endl;

    system ("pause");
}

setprecision(10)(iomanip)是必需的,否则istringstream会隐藏一些小数