C ++:使用指针通过函数操作String

时间:2013-05-27 10:11:04

标签: c++ string iterator

我编写了以下程序,它将删除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

3 个答案:

答案 0 :(得分:1)

如果您无法修改功能签名。您可以使用“c_str()”返回C String。不建议这样做。

#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;
}

答案 1 :(得分:0)

初始化s1时:

string s1(input);

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

更好的想法是避免使用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.
      ...

 }

答案 2 :(得分: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;