我正在尝试这种技术,但错误即将来临。请帮我将数字从字符串转换为整数。
#include<iostream>
using namespace std;
int main()
{
char *buffer[80];
int a;
cout<<"enter the number";
cin.get(buffer,79);
char *ptr[80] = &buffer;
while(*ptr!='\0')
{
a=(a*10)+(*ptr-48);
}
cout<<"the value"<<a;
delete ptr[];
return 0;
}
错误是:
答案 0 :(得分:5)
当您将变量定义为“char * buffer [80]”时,实际上是在创建一个包含80个char指针的数组,而不是大小为80的数组。此外,您不应删除任何未使用new分配的数组(或删除[]未使用new []分配的任何内容,在这种情况下)。
编辑:另一件事,你实际上并没有推进ptr,所以你总是会看第一个角色。
答案 1 :(得分:3)
正如@Tal所提到的,您正在创建char*
的缓冲区,但您将它们视为char
的缓冲区。但是,推荐的C ++方法根本不使用原始缓冲区:
#include<iostream>
#include <string>
using namespace std;
int main()
{
string buffer;
int a = 0;
cout<<"enter the number";
cin >> buffer;
for(string::iterator it = buffer.begin(); it != buffer.end(); ++it)
{
a=(a*10) + (*it-48);
}
cout<<"the value"<<a;
return 0;
}
当然,这可以缩短为:
#include<iostream>
using namespace std;
int main()
{
int a;
cout<<"enter the number";
cin >> a;
cout<<"the value"<<a;
}
但那已经使用了库函数。
编辑:同时修复int a
未初始化。这导致你的程序返回垃圾。
答案 2 :(得分:0)
下面将有所帮助。我在项目中使用这种方式。
bool stringToInt(std::string numericString, int *pIntValue)
{
int dVal = 0;
if (numericString.empty())
return false;
for (auto ch : numericString)
{
if (ch >= '0' && ch <= '9')
{
dVal = (dVal * 10) + (ch - '0');
}
else
{
return false;
}
}
*pIntValue = dVal;
return true;
}
int main()
{
int num = 0;
std::string numStr;
std::cin >> numStr;
if (!stringToInt(numStr, &num))
std::cout << "convertionFailed\n";
return 0;
}