我正在使用的功能是
vector<string> tokenise(string s){
}
首先,我打算将字符串拆分为子字符串,在这种情况下,字符串总是算术表达式(例如“100 + 5”),并且可能有一些空格。
“100 + 5”需要转换为“100”,“+”,“5”
转换后,子字符串将存储在向量中并返回它。我正在努力争取第一步并使用下标循环一个字符串。返回的值的类型是char,因此无法将其放入向量中。
答案 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;
你可以在这里看到相同的演示
答案 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;
}