如何把字符串string里的整数一个个提出来,用c++写。

例如“1 23 234 567 3”输出后变成5个整数1,23,234,567,3。
2025-01-04 23:00:27
推荐回答(4个)
回答1:

既然你说要用C++写,我就全用了标准模板库STL来写。所以请注意编译器的设置,在gcc和vc的编译器下都编译测试通过。而且此程序还能处理更复杂的字符串,如:" 123 abc 34 #$ 5%6 132 78 "

#include
#include
#include

using namespace std;

// str 为待转换的字符串,v 为转换后的整型数据存放的容器
void convert(string &str, vector &v)
{
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 v;
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;
}

回答2:

#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< if(str[i]!=' ')
{
num=num*10+(str[i]-48);
//cout< }
else
{
cout< num=0;
}

}
cout<}

回答3:

int a,b,c,d,e;
sscanf("1 23 234 567 3", "%d %d %d %d %d", &a,&b,&c,&d,&e);

回答4:

yanmi1982的正解~