我有一串数字。我试图使用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
}
答案 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会隐藏一些小数