存储字符串数组和解析每个字符串C ++的问题

时间:2015-09-20 03:30:06

标签: c++ arrays string

好的,基本上我的程序首先是用户输入。输入以整数n开头,指定要遵循的命令数。在该行之后,每行将有n行命令。我试图将每个命令存储为字符串数组中的字符串,然后我尝试处理每个字符串以找出它是什么类型的命令以及用户在同一行上输入的数字。

示例输入:

  

./一个

     

2

     

我1 2

     

I 2 3

我希望我的程序然后将第一个输入(2)下的每一行存储到一个字符串数组中。然后我尝试处理每一个字母,并在该单行中编号。

我目前的代码如下:

#include <iostream>
#include <string>
using namespace std;

int main() {
int number_of_insertions;
cin >> number_of_insertions;
cin.ignore();

string commandlist[number_of_insertions];

for(int i = 0; i < number_of_insertions; i++) {
    string command;
    getline(cin, command);
    commandlist[i] = command;
}


string command;
char operation;
int element;
int index;
for(int i = 0; i < number_of_insertions; i++) {
    command = commandlist[i].c_str();
    operation = command[0];

    switch(operation) {
        case 'I':
            element = (int) command[1];
            index = (int) command[2];
            cout << "Ran insertion. Element = " << element << ", and Index = " << index << endl;
            break;
        case 'D':
            index = command[1];
            cout << "Ran Delete. Index = " << index << endl;
            break;
        case 'S':
            cout << "Ran Print. No variables" << endl;
            break;
        case 'P':
            index = command[1];
            cout << "Ran print certain element. Index = " << index << endl;
            break;
        case 'J':
        default:
            cout << "Invalid command" << endl;

    }
 }  
}

然后我输出的示例输出如下:

  

Ran插入。元素= 32,索引= 49

     

Ran插入。元素= 32,索引= 50

根本不确定如何解决这个问题,并期待从每个人那里得到一些帮助。

1 个答案:

答案 0 :(得分:0)

        element = (int) command[1];
        index = (int) command[2];

不要将command的第二个和第三个标记转换为整数。他们只取command的第二个和第三个字符的整数值,并分别将它们分配给elementindex

您需要做的是使用某种解析机制从command提取令牌。

std::istringstream str(command);
char c;
str >> c; // That would be 'I'.

str >> element;
str >> index;