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

您需要识别第一个非空白字符,然后将值从那里复制到数组的开头。然后,您需要识别最后一个非空白字符,并在其后创建一个新的空终止符。

请注意,您实际上并没有删除或删除任何内容,您只是更改了数组中字符的值。

您可能会发现 C 标准库中的一些字符串处理函数很有用;这是它们的列表:http ://en.cppreference.com/w/c/string/byte 。

于 2013-01-13T02:59:55.940 回答
3

要从末尾修剪空白,只需在适当的位置写一个 0。字符串处理函数将其解释为字符串的结尾。要从开头删除空格,最简单的方法是使用指向数组的指针并让它指向第一个非空格字符。但是您也可以将字符移动到数组的开头,例如使用memmove.

于 2013-01-13T03:00:44.513 回答
3

一种方法是分配第二个字符串并将第一个字符串处理成第二个......

#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 回答