0

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

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

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

这可能吗?

我一直在用字符串做这个,但我真的需要用 char 指针来做这个。这是我使用字符串完成此操作的方法:

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;

所以你在这里看到我正在做这一切将字符串,但我似乎无法逃脱将像 test 这样的 char * 变量分配给字符串,因为它是非法转换。但是,为什么我可以像这样将我的 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

感谢您的时间。

4

2 回答 2

3

改变

char *test = str;

进入:

char *test = str.c_str();

c_str是一种从原始字符串为您创建 c 样式字符数组的方法。

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

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

在这里,您可以参考 std 字符串类。strdup的联机帮助页。

于 2013-07-19T14:51:11.233 回答
0

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

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*)返回到“后一个”元素并将该字符设置为 0 的事实 - 确保它保持为零分隔的字符串

于 2013-07-19T14:55:00.877 回答