0

すべてのスペースが含まれているかどうかを確認する必要がある一連の文字列があります。

できますstrlen(trim(strct.data)) > 0

ただし、ヌル終端ではありませんが、長さはわかっています。

つまり、 5 の場合、5 文字分のスペースがstrct.lenあるかどうかを確認する必要があります。strct.data6 番目の文字が null であるとは限りません。strctスペースを検証するために、それぞれ異なる長さのデータを持つことができる配列があります。

試してみたところstrnlen(trim(strct.data))、トリムによってすべてのスペースが既に削除されているため、何も修正されないことに後で気付きました。

の各文字を明らかにループする以外のアイデアstrct.dataはありますか (他に方法がない場合の私の最後のオプション)?

注: トリムは、先頭と末尾のスペースを削除するために使用するユーザー定義関数です。それもNULLまで止まりません。私は両方を処理する方法を探しています。

4

3 に答える 3

1

指定された長さの文字列がスペースでいっぱいであることを確認する方法は?

ステップ1:

  char buf[MAX_SIZE];
  sprintf(buf,"%*s",MAX_SIZE-1,"");  //fill buffer with spaces

ステップ2:

次に、文字配列strncmp()の strct.len 文字数を比較 しますstrct.databuf

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 を使用する必要があります。

于 2013-10-22T16:54:37.463 に答える
1

文字配列は null で終了していないため、stringではありません。
しかし、その点について口論せずに、大きな配列の高速なルーチンを作成しましょう。

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);
}
于 2013-10-22T16:46:55.777 に答える
1

おそらく最善の方法は、ループを自分で行うことです。

for(int i=0; i<strct.len; ++i) {
  if(strct[i] != ' ') {
    return false;
  }
}
return true;
于 2013-10-22T16:27:09.577 に答える