在我的代码中,我有char数组,在这里是: char pIPAddress[20];
我从具有以下代码的字符串设置此数组:strcpy(pIPAddress,pString.c_str());
加载后;例如,pIPAddress值为“192.168.1.123”。但是我不要空格。我需要删除空格。为此,我做了这个pIPAddress[13]=0;
。
但是,如果IP长度有机会,它将无法正常工作。我怎样才能计算出节省空间的方式?还是其他方式?
n
最佳答案
您可以做的最简单的方法是使用std::remove_copy
算法:
std::string ip = read_ip_address();
char ipchr[20];
*std::remove_copy( ip.begin(), ip.end(), ipchr, ' ' ) = 0; // [1]
下一个问题是您为什么要执行此操作,因为最好不要将其复制到数组中,而是从字符串中删除空格,然后使用
c_str()
来检索指针……编辑根据James的建议,如果要删除所有空间而不仅仅是
' '
字符,则可以将std::remove_copy_if
与函子一起使用。我已经测试了直接从std::isspace
header 传递<locale>
,它似乎可以正常工作,但是我不确定使用非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++中将字符串转换为不带空格的char数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8078048/