我有一堆字符串需要验证它们是否包含所有空格。
我可以strlen(trim(strct.data)) > 0
。
但是,它是非空终止,但长度已知。
即。如果strct.len
为5,那么我需要验证strct.data
是否有5个字符的空格。第6个字符不保证为空。我有一个strct
数组,每个数组可以有不同长度的数据来验证空格。
我尝试strnlen(trim(strct.data))
后来意识到它没有修复任何东西,因为修剪已经删除了所有空格。
除strct.data
的每个字符的明显循环之外的任何其他想法(如果没有别的话,我的最后一个选项)?
注意:trim是用户定义的函数,用于删除前导和尾随空格。它也不会停止,直到NULL。我正在寻找一种方法来处理它们。
答案 0 :(得分:1)
可能最好的是自己循环:
for(int i=0; i<strct.len; ++i) {
if(strct[i] != ' ') {
return false;
}
}
return true;
答案 1 :(得分:1)
由于字符数组未终止,因此它不是字符串 但是,我们不要在这一点上狡辩并为大型阵列制定快速例行程序。
IsCharArrayAllSpace(const char *p, size_t Length) {
if (Length < 1) return 1; // TBD: decide how to handle the zero-length case
return (p[0] == ' ') && (memcmp(p, &p[1], Length-1) == 0);
}
答案 2 :(得分:1)
如何确保字符串充满给定长度的空格?
第1步:
char buf[MAX_SIZE];
sprintf(buf,"%*s",MAX_SIZE-1,""); //fill buffer with spaces
第2步:
现在使用strncmp()
将strct.data
字符数组的strct.len数字与buf
进行比较
if(strncmp(strct.data ,buf ,strct.len) ==0)
{
//all are spaces
}
您无需重复步骤1。
另一种解决方案jxh建议您也可以使用memset()
代替sprintf()
memset(buf, ' ', sizeof buf); //fill buf with all spaces
你需要这样做一次,下次你不需要这样做。
您也可以使用VLA。
声明char buf[strct.len]
;
但每次都需要使用memset。