-3

我编写了以下程序,它将从 string1 中删除 string2 中存在的所有常见字符。

 #include<iostream>
 #include<string>
 #include<iterator>

 using namespace std;

 void DelCommonChar(char *input, string s2)
  {
          string s1(input);
          string::iterator it1;
          string::iterator it2;

          for(it1=s1.begin();it1<s1.end();it1++)
          {
                  for(it2=s2.begin();it2<s2.end();it2++)
                  {
                          if(*it1==*it2){it1=s1.erase(it1);it1--;}
                  }
          }
          cout<<s1<<endl;              // Line Number 20
  }


  int main()
  {
          char c[32];
          strncpy(c,"Life of Pie",32);
          DelCommonChar(c,"def");
          cout<<c<<endl;              //Line Number 29
  }

Output:Li o pi  ......... printed through line number 20.

但现在我想改变变量c[32]本身,main function我想line number 29打印输出。

您能帮帮我吗,如何c[32]仅在函数内部更改变量DelCommonChar

注意:我不想更改函数返回数据类型void

4

3 回答 3

1

如果您无法修改函数签名。您可以使用“c_str()”返回 C 字符串。不建议这样做。

#include<iostream>
#include<string>
#include<iterator>

using namespace std;

void DelCommonChar(char *input, string s2)
{
        string s1(input);
        string::iterator it1;
        string::iterator it2;

        for(it1=s1.begin();it1<s1.end();it1++)
        {
                for(it2=s2.begin();it2<s2.end();it2++)
                {
                        if(*it1==*it2){it1=s1.erase(it1);it1--;}
                }
        }
        std::strcpy (input, s1.c_str());
}


int main()
{
        char *c = (char *)malloc(32);
        strncpy(c,"Life of Pie",32);
        DelCommonChar(c,"def");
        cout<<c<<endl;
}
于 2013-05-27T10:26:31.057 回答
0

您可以维护两个指针,一个用于检查,一个用于写入。就像是:

int check=0,write=0;
while (input[check])
{
    if (input[check] is not to be deleted)
    {
        input[write++]=input[check];
    }
    ++check;
}
input[write]=0;
于 2013-05-27T10:24:40.250 回答
0

初始化时s1

string s1(input);

它将 的内容复制input到其内部缓冲区中。修改 s1 不会改变原始缓冲区。如果您想在输入中存储内容,请将它们复制回来(但是strcpy,它们都是“不安全的”)或直接操作。strncpymemcpyinput

一个更好的主意是避免使用 C 字符串 ( char*) 并使用带有引用的 std::strings。

void DelCommonChar(std::string &input, string s2)
{
      std::string &s1 = input;//you don't need that, you can use input directly.
      ...

 }
于 2013-05-27T10:20:29.267 回答