从字符*C++中删除项目
Remove items from a char * C++
我正在尝试从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-确保它保持零分隔字符串
相关文章:
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- C++ 从链表中删除项目时出现问题
- 从 std::vector 中删除项目时"Iterator not incrementable"
- 从 QTreeView 中删除项目时取消选择所有行
- 从传递给新线程C++的矢量中删除项目
- 如何创建一个函数,该函数可以从一个qtreewidget中删除项目并将其添加到另一个函数
- 在拖放 QML 列表中插入/删除项目使用 cpp 模型查看
- 如何在不删除C++集中删除项目?
- CMake 正在删除项目 c++
- 如何从 qmake 中的包含路径中删除项目的根目录
- 从多个 std::vector 中删除项目的最快方法
- 这是从 std::vector 中删除项目的有效方法吗?
- 从C 列表中删除项目
- STD :: MAP-如何查找或添加,然后可以在一次搜索中删除项目
- 使用迭代器从Boost多指数中删除项目时的一致性
- C++从指针数组中删除项目
- 如何设置CMAKE_INTDIR或CMAKE_CFG_INTDIR来删除项目配置
- 如何从std::列表中删除项目
- 尝试从__FILE__中删除项目路径
- Delphi XE-无法从系统菜单中删除项目