c++ - 在C++中将字符串转换为不带空格的字符数组

标签 c++ string char

在我的代码中,我有 char 数组,它是: char pIPAddress[20]; 我使用以下代码从字符串设置此数组:strcpy(pIPAddress,pString.c_str());

加载后;例如 pIPAddress 值为“192.168.1.123”。但我不想要空格。我需要删除空格。为此,我执行了pIPAddress[13]=0;

但是如果IP长度有问题的话,就不行了。我怎样才能计算空间有效的方式?或者其他方式?

谢谢

最佳答案

您可以做的最简单的方法是使用 std::remove_copy算法:

std::string ip = read_ip_address();
char ipchr[20];
*std::remove_copy( ip.begin(), ip.end(), ipchr, ' ' ) = 0; // [1]

下一个问题是为什么要这样做,因为最好不要将其复制到数组中,而是从字符串中删除空格,然后使用 c_str()检索指针...

编辑根据詹姆斯的建议,如果您想删除所有空格而不仅仅是 ' '字符,您可以使用 std::remove_copy_if与一个仿函数。我已经测试通过std::isspace来自<locale>直接 header 并且似乎可以工作,但我不确定这对于非 ascii 字符(可能是负数)不会有问题:

#include <locale>
#include <algorithm>
int main() {
   std::string s = get_ip_address();
   char ip[20];
   *std::remove_copy_if( s.begin(), s.end(), ip, (int (*)(int))std::isspace ) = 0; // [1]
}

最后一个参数中的可怕转换需要选择 isspace 的特定重载。 .

[1] *... = 0;需要添加以确保字符串以 NUL 结尾。 remove_copyremove_copy_if算法返回end输出序列中的迭代器(即超出编辑的最后一个元素的迭代器),以及 *...=0取消引用该迭代器以写入 NUL。或者,可以在调用算法之前初始化数组 char ip[20] = {};但这会写 \0到数组中的所有 20 个字符,而不仅仅是到字符串的末尾。

关于c++ - 在C++中将字符串转换为不带空格的字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8078048/

相关文章:

Java char 数组相等不起作用

c++ - 从 edge_iterator 获取 vertex_handle

c++ - C++ 的 Visual Studio 代码指标插件

c++ - 在 C++ 中使用线程按顺序填充 vector

c - 需要写一个C程序去除相邻的重复字符

c - 调用结构成员时出现段错误

C++ 管理对象

string - 如何转换[i8; 88]有点刺耳

C 在函数之间传递字符串

mysql - 如何将字符添加到字符串中的特定索引