项目开发常见字符串处理模型-两头堵模型

https://blog.csdn.net/flying_wild_fox/article/details/50155067

strlen函数  :从内存的某个位置开始开始扫描,直到碰到第一个字符串结束符‘0’为止,然后返回计数器值,返回的长度不包含'\0'

isspace函数 :若参数为空白字符,则返回TRUE,否则返回NULL。 空白字符包含哪些见文章末尾

PS: 如果不知道c语言提供的库函数存放在哪个头文件,可以下载c语言函数大全查一下

 

需求:编写一个函数,要求去除字符串的前后空格

下面用二种方法实现

1 创建一个字符型数组,用数组去接收去除空格后的字符串

2 直接修改原字符串,把空格删除 (这样做的前提是char* 指针所指向的内存空间必须可以被修改才行)。

 

1 创建一个字符型数组,用数组去接收去除空格后的字符串

#define _CRT_SECURE_NO_WARNINGS

#include <stdlib.h>

#include <string.h>

#include <stdio.h>

#include <ctype.h>

int trimSpace(char*str, char*newstr)

{  

  char* p = str; //不要直接修改形参指针,用一个临时变量去接收它的值,修改临时变量

  int count = 0; 

  if (str == NULL || newstr == NULL)  

  {   

    return 0;  

  }

   int i = 0;

   int j = strlen(p) - 1;

   while (isspace(p[i]) && p[i] != '\0')//是空白符就往后走,直到找到第一个不是空白字符的字符

   {  

    i++;  

  }  while (isspace(p[j]) && p[j] != '\0')//是空白符就往前走,直到找到第一个不是空白字符的字符  {   j--;  }

  count = j - i + 1;//计算去除二边空白字符后的长度

   strncpy(newstr, str + i, count);//从str的第i个开始,拷贝count个字符到newstr    

  newstr[count] = '\0';//别忘了在newstr后面加字符串结束符 '\0'

   return 1;

}

int main(void)

{  

  char *p = "    abcd   "; //字符串的首尾都有空格  

  char arrstr[128]; //足以包含去除空格后的字符串就可以  

  trimSpace(p, arrstr);

  printf("字符串: %s \n", arrstr);  

  system("pause");  

  return;

}

 

2 直接修改原字符串,把空格删除 (这样做的前提是char* 指针所指向的内存空间必须可以被修改才行)

int trimSpace(char*str)

{

  char* p = str; //不要直接修改形参指针,用一个临时变量去接收它的值,修改临时变量  

  int count = 0;  

  if (str == NULL)  

  {   return 0;  }

   int i = 0;  

  int j = strlen(p) - 1;

  while (isspace(p[i]) && p[i] != '\0')//是空白符就往后走,直到找到第一个不是空白字符的字符  

  {   

    i++;  

  }  

  while (isspace(p[j]) && p[j] != '\0')//是空白符就往前走,直到找到第一个不是空白字符的字符  

  {   

    j--;  

  }

   count = j - i + 1;//计算去除二边空白字符后的长度

   strncpy(str, str + i, count);//直接修改str, 从str的第i个开始,拷贝count个字符到str    

  str[count] = '\0';//别忘了在newstr后面加字符串结束符 '\0'

   return 1;

}

这个函数直接修改str,所以必须保证传入的字符串str指向的内存空间是可写的

通过内存四区知道:char *p = "    abcd   ";这样字符串会存在常量区,是不可修改的

char buf[128]; 这样字符串buf存在栈区,可以修改,所以在调用trimSpace时可以用char数组调用:

 

int main(void)

{  

  char buf[] = "    abcd   "; //字符串的首尾都有空格  

  trimSpace(buf);

  printf("字符串: %s \n", buf);  

  system("pause");  

  return;

}

 

 

 空白字符包含

' '  空格

'\t' 水平制表符

'\n‘ 换行符

'\v' 垂直制表符

'\f' 换页符

'\r' 回车符

posted on 2019-01-21 10:27  锋邢天下  阅读(282)  评论(0编辑  收藏  举报

导航