如何确保字符串充满给定长度的空格?

时间:2013-10-22 16:20:34

标签: c string validation null strlen

我有一堆字符串需要验证它们是否包含所有空格。

我可以strlen(trim(strct.data)) > 0

但是,它是非空终止,但长度已知

即。如果strct.len为5,那么我需要验证strct.data是否有5个字符的空格。第6个字符不保证为空。我有一个strct数组,每个数组可以有不同长度的数据来验证空格。

我尝试strnlen(trim(strct.data))后来意识到它没有修复任何东西,因为修剪已经删除了所有空格。

strct.data的每个字符的明显循环之外的任何其他想法(如果没有别的话,我的最后一个选项)?

注意:trim是用户定义的函数,用于删除前导和尾随空格。它也不会停止,直到NULL。我正在寻找一种方法来处理它们。

3 个答案:

答案 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。