0

我有一串数字。我正在尝试使用 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
}
4

5 回答 5

5

str[i]是 a char,而strToNum期望 a string,因此类型错误。

于 2013-09-02T09:13:25.610 回答
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

这里

于 2013-09-02T09:13:54.400 回答
2

其他人已经解释了你的错误。这就是你可以使它工作的方法:

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

但我会这样做:

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

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

于 2013-09-02T09:16:41.773 回答
1

你根本不需要istringstream。

int strToNum(char ch)
{
    cout << ch;
}
于 2013-09-02T09:16:25.953 回答
0

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

#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 将隐藏一些小数

于 2014-01-24T09:01:39.427 回答