关于C++的输入问题,求助!

请教各位,我在VS的控制台输入一串用空格隔开的数据,包括int型数字和char型字符,但是不存在统一格式,也就是说没法用scanf(),数据的数目也是不定的。请问如何将字符与数字分开并装入不同的容器?

比如说输入“1 2 3 b c 4 5 a 8 :" 。我想将1 2 3 4 5 8分成一组,b c a p 和冒号“:”分为另一组。

我对C++不太熟练,希望有人能解答以下,谢谢了!

3个回答

string输入
string str;
getline(cin,str);
然后自己根据空格分割判断呗

xbr1995
xbr1995 回复starcat2002:已解决,谢谢!
10 个月之前 回复
J4cks0n
J4cks0n 回复starcat2002: ???还要我帮你写程序咯?
10 个月之前 回复
starcat2002
starcat2002 回复: using namespace std;
10 个月之前 回复
starcat2002
starcat2002 回复: #include <iostream>
10 个月之前 回复
starcat2002
starcat2002 这段代码需要#include<string>
10 个月之前 回复

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;
}

#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,正则(相关)会比较有帮助。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐