既然你说要用C++写,我就全用了标准模板库STL来写。所以请注意编译器的设置,在gcc和vc的编译器下都编译测试通过。而且此程序还能处理更复杂的字符串,如:" 123 abc 34 #$ 5%6 132 78 "
#include
#include
#include
using namespace std;
// str 为待转换的字符串,v 为转换后的整型数据存放的容器
void convert(string &str, vector
{
int pos = 0; // 字符串游标位置
int ch; // 字符串游标位置的值
int value = 0; // 某一个转换后的整型值
int flag = 0;
while (true)
{
ch = str[pos++];
if (ch >= '0' && ch <= '9')
{
if (!flag) flag = 1;
value = value * 10 + (ch - '0');
}
else
{
if (flag)
{
v.push_back(value);
flag = 0;
value = 0;
}
if (ch == 0) break;
}
}
}
int main()
{
vector
string str = " 123 abc 34 #$ 5%6 132 78 ";
convert(str, v);
for (size_t i = 0; i < v.size(); ++i)
{
cout << v[i] << endl;
}
return 0;
}
这里还提供了一个纯C的版本
#include
// str为待转换的字符串,int_arr为转换后的整型数据存放的数组
// 返回转换后的整型数据的个数
int convert(const char* str, int *int_arr)
{
int pos = 0;
int ch;
int value = 0;
int flag = 0;
int counter = 0;
while (1)
{
ch = str[pos++];
if (ch >= '0' && ch <= '9')
{
if (!flag) flag = 1;
value = value * 10 + (ch - '0');
}
else
{
if (flag)
{
int_arr[counter++] = value;
flag = 0;
value = 0;
}
if (ch == 0) break;
}
}
return counter;
}
int main()
{
int int_arr[128];
int int_arr_size;
int counter;
char *str = " 123 34 56 132 78 ";
int_arr_size = convert(str, int_arr);
for (counter = 0; counter < int_arr_size; ++counter)
{
printf("%d\n", int_arr[counter]);
}
return 0;
}
#include
#include
using namespace std;
void main()
{
char str[30];
int num=0;
gets(str);//12 3 456
for(int i=0;str[i]!='\0';i++)
{
//cout<
{
num=num*10+(str[i]-48);
//cout<
else
{
cout<
}
}
cout<
int a,b,c,d,e;
sscanf("1 23 234 567 3", "%d %d %d %d %d", &a,&b,&c,&d,&e);
yanmi1982的正解~