c - 从 C 中的字符串中去除空格和换行符

标签 c string trim strip

我有这样的输入:

"  aaaaa      bbb \n cccccc\n ddddd \neeee   "

我需要像这样清理它:

"aaaaa bbb cccccc ddddd neeee"

基本上:

  • 去掉字符串开头和结尾的所有空格
  • 删除所有新行
  • 当有多个空格时去除所有空格,但始终在单词之间保留一个空格

有什么简单的方法可以做到这一点,或者我必须逐个字符地处理字符串并将适当的字符复制到不同的变量?

最佳答案

假设您不能就地修改字符串,

void splcpy(char *s, char *m){ //s is the unmodified string
  int word = -1; //keeps track what was stored in last loop
  while(*s){  //until it ends
    if(!isspace(*s)){
      if(word==0)  *m++ = ' '; //if last char was space, add space
      *m++ = *s++;
       word = 1;
    }
    else{
      if(word == 1)   word = 0; //if last char was !space
      while(isspace(*s++)); //consume all space until end
    }
  }
  *m = '\0'; //end the string nicely
}

char *input = "  aaaaa      bbb \n cccccc\n ddddd \neeee   ";
char *modified = malloc(sizeof(char) * strlen(input));

splcpy(input, modified);

关于c - 从 C 中的字符串中去除空格和换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2527698/

相关文章:

java - 使用匹配器和正则表达式提取子字符串

postgresql - 如何在 PostgreSQL 中修剪文本数组?

c - 为什么要在方法定义文件中包含 header ?

c - 如何在字符串中存储ascii值0而不终止它?

string - 从 1 到 N 的字典序排序数字中的第 K 个数字

java - 将多行读入Java中的扫描仪对象

java - 如何将18位 double 格式化为10个字符串字符

laravel - 在中间件中修改请求?

c - 打印一个包含 4 列的表格,用于英尺到码之间的转换

c - 数字列表框