请教各位,我在VS的控制台输入一串用空格隔开的数据,包括int型数字和char型字符,但是不存在统一格式,也就是说没法用scanf(),数据的数目也是不定的。请问如何将字符与数字分开并装入不同的容器?
比如说输入“1 2 3 b c 4 5 a 8 :" 。我想将1 2 3 4 5 8分成一组,b c a p 和冒号“:”分为另一组。
我对C++不太熟练,希望有人能解答以下,谢谢了!
string输入
string str;
getline(cin,str);
然后自己根据空格分割判断呗
#include <iostream>
#include <string>
#include <vector>
#include <stdlib.h>
using namespace std;
typedef struct args{
vector<int> iArgs;
vector<string> sArgs;
} Args;
Args getArgsByLine(){
Args args;
string str;
while(cin >> str){
if( '0' <= str[0] && str[0] <= '9' )
args.iArgs.push_back(atoi(str.c_str()));
else
args.sArgs.push_back(str);
if(getchar()=='\n')
break;
}
return args;
}
void dispArgs(Args args){
cout << "Int Args: ";
for(int i = 0; i < args.iArgs.size(); i++)
cout << args.iArgs[i] << " ";
cout << endl;
cout << "Str/Char Args: ";
for(int i = 0; i < args.sArgs.size(); i++)
cout << args.sArgs[i] << " ";
cout << endl;
}
int main(){
while(!cin.eof()){
Args args = getArgsByLine();
dispArgs(args);
}
return 0;
}
其中getArgsByLine函数是你需要的,其他的只是帮助展示。
题主学一下vector,stringstream,正则(相关)会比较有帮助。
c/c++ 代码:
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
#define BUF_SIZE 1024
//为了封装打印函数,定义为全局
char arr[BUF_SIZE] = {};
int int_arr[BUF_SIZE] = {};
char *s_arr[BUF_SIZE] = {};
int index_i = 0;
int index_s = 0;
void print()
{
printf("Output int: ");
for(int i=0;i<index_i;i++)
{
printf("%d ",int_arr[i]);
}
printf("\n\n");
printf("Output string: ");
for(int j=0;j<index_s;j++)
{
printf("%s ",s_arr[j]);
}
printf("\n");
}
int main()
{
gets(arr);
//主要使用函数strtok、atoi
const char *sep = " ";
char *p;
p = strtok(arr,sep);
while(p){
int number = std::atoi(p);
if(number != 0)
{
int_arr[index_i++] = number;
}
else
{
s_arr[index_s++] = p;
}
p = strtok(NULL, sep);
}
//打印结果
print();
getchar();
return 0;
}