从字符*C++中删除项目

Remove items from a char * C++

本文关键字:删除项目 C++ 字符      更新时间:2023-10-16

我正在尝试从char指针中删除字符,并希望将它们存储回一个新的char指针变量中,比如"temp"。所以我会有这样的东西:

char *test = "1@2#3$4%5^6&7*8!9@1#0";
char *temp = "";

然后删除"@,#,$,%,^,*,!,@,#",并将新值"12345678910"放入*temp中。这将使温度等于"12345678910"。

这可能吗?

我一直在用字符串来做这件事,但我真的需要用字符指针来做。以下是我如何使用字符串做到这一点:

std::string str("1@2#3$4%5^6&7*8!9@1#0");
std::string temp("");
    char chars[] = "@#$%^&*!";
    for (unsigned int i = 0; i < strlen(chars); ++i)
   {
       str.erase (std::remove(str.begin(), str.end(), chars[i]), str.end());
    }
    temp = str;

所以你看,我在这里做的是所有的will字符串,但我似乎无法逃脱将char*变量(如test)转换为字符串的惩罚,因为这是非法转换。然而,为什么我可以像这样将我的char*变量设置为字符串?

char *test = "123456789";

然而这是违法的?

std::string str("1@2#3$4%5^6&7*8!9@1#0");
    char chars[] = "@";
    for (unsigned int i = 0; i < strlen(chars); ++i)
   {
       str.erase (std::remove(str.begin(), str.end(), chars[i]), str.end());
    }
    char *test = str; //Illegal point

谢谢你抽出时间。

更改

char *test = str;

进入:

char *test = str.c_str();

c_str是一个从原始字符串中为您创建c风格char数组的方法。

编辑:这是一种更安全的方式,将获得c字符串的副本:

#include <cstring>
#include <cstdlib>
...
char *test = strdup(str.c_str());
... // process the string
free(test);

这里有一个对std字符串类的引用。strdup的Manpage。

使用迭代器可以做的任何事情,也可以使用指向数组的指针。比如说,一个字符数组:

char str[] = "1@2#3$4%5^6&7*8!9@1#0";
char chars[] = "@";
for (unsigned int i = 0; i < strlen(chars); ++i)
{
   *std::remove(str, str+strlen(str), chars[i])=0;
}

注意,我使用了这样一个事实,即std::remove向"倒数第一"元素返回一个iterator(在本例中为char*),并将该char设置为0-确保它保持零分隔字符串