为什么这个分割功能不起作用?
我正在创建一个函数,它应该将input1
分为function
字符串(其中包含第一个字input1
)和arguments
字符串(其中包含input1
的其余部分)。如果我尝试打印function
字符串和arguments
字符串,它们显示为空。为什么这个分割功能不起作用?
我该怎么办?
void split (string input1, string function, string arguments){
bool args = false;
string undefined;
for (int i = 0; i < input1.length(); i++){
if (input1[i] == ' '){
if (i == 0) {
input1.erase(0, 1);
} else if (i == (input1.length() - 1)){
input1.erase((input1.length() - 1), 1);
} else {
if (!args) {
for (int o = 0; o < undefined.length(); o++)
function.push_back(undefined[o]);
args = true;
} else if (args) {
for (int u = 0; u < undefined.length(); u++)
arguments.push_back(undefined[u]);
}
}
} else {
if (i == (input1.length() - 1)){
undefined.push_back(input[i]);
if (!args)
for (int u = 0; u < undefined.length(); u++)
function.push_back(undefined[u]);
else
for (int e = 0; e < undefined.length(); e++)
arguments.push_back(undefined[e]);
} else {
undefined.push_back(input[i]);
}
}
}
}
免责声明:这个答案是假定你使用0。
void split (string input1, string function, string arguments){
当这个函数被调用这样
string a = "input";
string b;
string c;
split(a, b, c);
那么你基本上是通过副本的a
,b
和c
的功能split
(b
和c
是空的,在这一点上)。为了功能split
能够修改这些你有两个选择:
-
使用指针:
void split (string input1, string * function, string * arguments) { [...] } split(a, &b, &c);
-
使用引用:
void split (string input1, string & function, string & arguments) { [...] } split(a, b, c);
选项2个皮事实上,调用者的b
和c
将被修改,但是是ea因为在选项1中,您必须更改function
或arguments
到*function
或*arguments
的所有用法,否则您将不得不添加像这样的第二个参考初始化(无论如何,我宁愿这样做,因为它会阻止您隐藏事实上,你要修改这些PARAMS):
void split (string input1, string * _function, string * _arguments) {
string & function = _function;
string & arguments = _arguments;
[...]
}
根据给你的实际任务,功能
split
可能实现比你是如何做到的要容易得多。提示PaulMcKenzie使用std::istringstream
和operator >>
来提取单词。
选项2如何隐藏值可以修改的事实?这是左值引用的用途。此外,我会做出选项2,选项1,因为它更容易处理参考。 – NathanOliver
@NathanOliver在调用代码中,'split(a,b,c);'与split(a,b,c)不能区分;'但它与split是分开的(a,&b,&c);' –
请考虑删除c标签,因为这个问题似乎是关于C++。 –
这听起来像你可能需要学习如何使用调试器来遍历代码。使用一个好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏离的位置。如果你打算做任何编程,这是一个重要的工具。进一步阅读:** [如何调试小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver
为什么我有一个鬼鬼祟祟的怀疑,这个似乎过于复杂,只是从字符串中提取单词?为什么要“擦除”? – PaulMcKenzie