在我的代码中,我有 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_copy
和remove_copy_if
算法返回end
输出序列中的迭代器(即超出编辑的最后一个元素的迭代器),以及 *...=0
取消引用该迭代器以写入 NUL。或者,可以在调用算法之前初始化数组 char ip[20] = {};
但这会写 \0
到数组中的所有 20 个字符,而不仅仅是到字符串的末尾。
关于c++ - 在C++中将字符串转换为不带空格的字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8078048/