我这里有一个忽略注释行的代码。问题是,我尝试使用我所拥有的功能创建一个函数,以便我可以在以后的任何地方使用它。但我遇到了一个问题。我的代码:
#include <iostream>
#include <string>
using namespace std;
string comment(string str);
int main ()
{
string str;
cout << "Enter the string> ";
getline( cin, str );
comment(str);
cout << str << "\n";
return 0;
}
string comment(string str)
{
unsigned found = str.find('#');
if (found!=std::string::npos)
str.erase(found);
else
return(str);
return(str);
}
示例输入:(来自键盘) 输入字符串&gt;我的名字是#comment
我得到的输出:
my name is #comment
输出我应该得到:
my name is
此外,如果我使用相同的代码没有该功能,我得到正确的答案。这是:
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string str;
cout << "Enter the string> ";
getline( cin, str );
unsigned found = str.find('#');
if (found!=std::string::npos)
str.erase(found);
cout << str << "\n";
return 0;
}
答案 0 :(得分:3)
您必须通过引用传递字符串
void comment(string& str)
^^^^ ^^^
或者从函数接收返回的值。
getline( cin, str );
str = comment(str);
^^^
否则该函数会收到字符串的副本。您在str
功能中执行的任何修改comment
都不会在main
中显示。