C ++将字符串拆分为vector <string>

时间:2017-05-03 04:42:38

标签: c++

我正在使用的功能是

vector<string> tokenise(string s){

}

首先,我打算将字符串拆分为子字符串,在这种情况下,字符串总是算术表达式(例如“100 + 5”),并且可能有一些空格。

“100 + 5”需要转换为“100”,“+”,“5”

转换后,子字符串将存储在向量中并返回它。我正在努力争取第一步并使用下标循环一个字符串。返回的值的类型是char,因此无法将其放入向量中。

3 个答案:

答案 0 :(得分:2)

在计算出数字,算术字符或不需要的字符范围之后,您可以调用字符串的substring方法。

答案 1 :(得分:1)

你提到过 - 返回值的类型是char,所以没有办法把它放在向量中。

你有一些返回角色的功能。然后,您希望将等效字符串插入到矢量中。

假设您的矢量定义为

std::vector<std::string> broken_strings;

所以你可以这样做。

char ch = ...; // Here comes the character that you get from the function.
std::string str(1, ch);
broken_strings.push_back(str);

然后你可以返回broken_strings。

编辑:

OP提到他想要代数化代数表达式。 所以它必须以不同的方式完成。

以下是一种简单的方法。

 std::vector<std::string> broken;
 std::string temp;
 for ( int i = 0; i<s.length() ;i++){
     char ch = s[i];
     if (ch == ' ')
         continue;
     else if (ch >= '0' && ch <='9')
         temp += ch;
     else{
         if (temp.length() != 0)
             broken.push_back(temp);
         temp = "";
         temp += ch;
         broken.push_back(temp);
         temp = "";
     }
 } 
 if (temp.length() != 0)
     broken.push_back(token);
 return broken; 

你可以在这里看到相同的演示

Ideone

答案 2 :(得分:1)

vector<string> tokenise(string s)
{
    vector<string> v;

    string number;

    for(int i = 0; i < s.length(); ++i)
    {
        if((s[i] >= '0') && (s[i] <= '9'))
        {
            number += string(1, s[i]);
        }
        else if(s[i] == '.')
        {
            number += string(1, s[i]);
        }
        else if((s[i] == '+') || (s[i] == '-') || (s[i] == '*') || (s[i] == '/'))
        {
            if(number.size())
            {
                v.push_back(number);
                number.clear();
            }
            v.push_back(string(1, c));
        }
    }

    if(number.size())
    {
        v.push_back(number);
        number.clear();
    }

    return v;
}