如何修剪char []格式的字符串?

时间:2013-01-13 02:56:29

标签: c

在我的C程序中,我创建了一个像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 ?

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

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

答案 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;
}