3

私の C プログラムでは、 のような char 配列を作成しますchar read_str[MAX_ALLOWED_BUFFER];。この配列を使用して、空白と改行文字を左右から削除するにはどうすればよいですか。これはポインターではないため、末尾の文字を取り除く方法がわかりません。誰でも助けてもらえますか?

char read_str[MAX_ALLOWED_BUFFER];
FILE *fp;
fp = fopen(argv[1],"r");
fgets(read_str, MAX_BUFFER, fp);
// how to trim read_str ?
4

3 に答える 3

4

最初の非空白文字を識別し、そこから値を配列の先頭にコピーする必要があります。次に、空白以外の最後の文字を特定し、その後に新しい null ターミネータ文字を作成する必要があります。

実際に何かを削除したり削除したりするのではなく、配列内の文字の値を変更しているだけであることに注意してください。

C 標準ライブラリの文字列処理関数の一部が役立つ場合があります。ここにそれらのリストがあります: http://en.cppreference.com/w/c/string/byte

于 2013-01-13T02:59:55.940 に答える
3

1 つの方法は、2 番目の文字列を割り当て、最初の文字列を 2 番目の文字列に処理することです...

#include <stdio.h>
#include <string.h>

#define MAX_ALLOWED_BUFFER 100

char read_str[MAX_ALLOWED_BUFFER] = "    a core string     ";
char result[MAX_ALLOWED_BUFFER];

int main(void) {
  char *t;

  read_str[MAX_ALLOWED_BUFFER - 1] = '\0'; // not needed here but wise in general
  // trim trailing space
  for(t = read_str + strlen(read_str); --t >= read_str; )
    if (*t == ' ')
      *t = '\0';
    else
      break;
  // trim leading space
  for(t = read_str; t < read_str + MAX_ALLOWED_BUFFER; ++t)
    if(*t != ' ')
      break;
  strcpy(result, t);
  printf("got <%s>\n", result);
  return 0;
}
于 2013-01-13T03:20:10.367 に答える
3

末尾の空白を削除するには、適切な場所に 0 を書き込みます。文字列処理関数は、それを文字列の末尾として解釈します。最初から空白を削除する最も簡単な方法は、配列へのポインタを使用して、最初の非空白文字を指すようにすることです。ただし、文字を配列の先頭に移動することもできますmemmove

于 2013-01-13T03:00:44.513 に答える