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

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

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 锋邢天下 阅读(...) 评论(...) 编辑 收藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值