纯C 实现 strpos substr strspilt str_trim
在C 语言中没有C++ 好用的 spilt 方法 (STL 带的也不怎么好用)
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std; int Cstrpos(char *haystack, const char *needle)
{
char *p;
p = strstr(haystack, needle);
if(p)
{
return p - haystack;
}
return -;
} int Csubstr(char *haystack, int start, int len, char *out)
{
int i;
for(i=; i<len; i++)
{
out[i] = haystack[start+i];
}
return ;
} char *Csplit(char *haystack, const char *needle, char *out)
{
int start, end, offset, i;
//match start
if( == memcmp(haystack, needle, strlen(needle)))
{
start = Cstrpos(haystack, needle);
if(- == start)
{
return NULL;
}
}
else
{
start = ;
}
end = Cstrpos(haystack+start, needle);
if(- == end)
{
end = strlen(haystack) - start;
}
offset = end; for(i=; i<offset; i++)
{
out[i] = haystack[i];
}
haystack += i+; return haystack;
} int main(int argc, char **argv)
{
//char *str = "123,456,789"; //2个测试字符串
char *str = "";
cout<<str<<endl; int pos1;
pos1 = Cstrpos(str, ",");
cout<<pos1<<endl; char out[] = {}; //Csubstr(str, 1, 3, out);
//cout<<out<<endl; cout<<"+++++++++++++++++++++"<<endl; memset(out, , );
str = Csplit(str, ",", out);
cout<<out<<endl; cout<<"+++++++++++++++++++++"<<endl; memset(out, , );
str = Csplit(str, ",", out);
cout<<out<<endl; cout<<"+++++++++++++++++++++"<<endl; memset(out, , );
str = Csplit(str, ",", out);
cout<<out<<endl; cout<<"+++++++++++++++++++++"<<endl; memset(out, , );
str = Csplit(str, ",", out);
cout<<out<<endl; return ;
}
因为也包含了测试程序 使用 cout 输出,所以使用 g++ 编译,执行。但3个函数是 可以移值到 ARM 、 KEIL、STM32 中的。
测试123,456,789
测试123
这个,目前还有一个缺点,分隔符只支持1个字符。
补发一个,实现的 str_trim 函数 需要头文件 #include <ctype.h>
static void str_trim(char *str)
{
int len;
char *copy;
char *end, *start; len = strlen(str);
copy = (char *)malloc(len + ); if(! copy)
{
logd("malloc error \n");
return ;
} memset(copy, , len + );
strcpy(copy, str);
start = copy;
end = start + len - ; while(end >= start)
{
if(! isgraph(*end))
{
*end = '\0';
end--;
}
else
{
break;
}
} len = strlen(copy);
end = start + len - ;
while(start <= end)
{
if(! isgraph(*start))
{
start++;
}
else
{
break;
}
} strcpy(str, start);
free(copy);
}
纯C 实现 strpos substr strspilt str_trim的更多相关文章
- php strpos() 函数介绍与使用方法详解
本文主要和大家介绍PHP中mb_strpos的使用技巧,通过使用语法以及实例给大家详细分析了用法,需要的朋友参考学习下.希望能帮助到大家.mb_strpos(PHP 4 >= 4.0.6, PH ...
- php生成各种验证码
片段 1 片段 2 片段 3 index.html ```<script type="text/javascript" src="jquery.min.js&quo ...
- [译] 给PHP开发者的PHP源码-第一部分-源码结构
文章来自:http://www.hoohack.me/2016/02/04/phps-source-code-for-php-developers-ch 原文:http://blog.ircmaxel ...
- [php入门] 2、基础核心语法大纲
1 前言 最近在学PHP,上节主要总结了PHP开发环境搭建<[php入门] 1.从安装开发环境环境到(庄B)做个炫酷的登陆应用>.本节主要总结PHP的核心基础语法,基本以粗轮廓写,可以算作 ...
- PHP利用jquery生成各种验证码和Ajax验证
PHP生成验证码图片 PHP生成验证码的原理:使用PHP的GD库,生成一张带验证码的图片,并将验证码保存在Session中.PHP 生成验证码的大致流程有: .产生一张png的图片: .为图片设置背景 ...
- php 解析 视频 信息 封面 标题 图片 支持 优酷, 土豆 酷6 56 新浪 qq播客 乐视 乐视
原文地址:http://www.lianyue.org/2013/2497/ <?php /** * 解析 视频信息 类 * * 支持 优酷, 土豆 酷6 56 新浪 qq播客 乐视 乐视 ** ...
- 一个PHP写的简单webservice服务端+客户端
首先是服务端,服务端有一个主要的class组成:apiServer.php <?php /** * apiServer.php * * webservice主类 * * @filename ap ...
- Curl 采集乱码 gzip 原因及解决方案 utf-8
用curl获取一个经过gzip压缩后的网页时返回乱码 原因大体就是服务器返回的Content-Encoding的值和网页的编码不同,造成curl解码出问题,直接将gzip或deflate编码的文件下载 ...
- 【代码实现】PHP生成各种随机验证码
原文地址:http://www.phpthinking.com/archives/531 验证码在WEB应用中很重要,通经常使用来防止用户恶意提交表单,如恶意注冊和登录.论坛恶意灌水等.本文将通过实例 ...
随机推荐
- python语法基础-基础-变量和数据类型
############### 第一个python程序 ############### print("hello python") # 打印hello python # 分 ...
- 为什么说iPhone无望恢复中国市场?
直到现在还记得,iPhone 4在国内当时引发的追捧狂潮.彼时iPhone 4绝对是一机难求,上至土豪下至学生都以拥有iPhone 4为荣.发售接近一年后仍然需要加价,价格动辄达到七八千元,真正成为了 ...
- 4k高分屏下,chm帮助文档,api文档打开后字体过小的解决
如图所示: 4k分辨率下,chm文件的正文部分的字体过小,这是这些网页可能使用了CSS维持字体dpi, 在普通分辨率下,可以显示正常,但在高分屏下就会显示得过小,这时我们就需要调整显示网页 的显示效果 ...
- LintCode排序
1.LintCode整数排序 给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法. 您在真实的面试中是否遇到过这个题? 是 样例 对于数组 [3, 2, 1, ...
- html和jsp页面中把文本框禁用,只能读不能写的方法
方法常用有三种: 第一种,使用 onfocus="this.blur()" <input name="deptno" type="text& ...
- upper_bound()函数使用方法
upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于num的数字,找到返回该数字的地址,不存在则返回end.通过返回的地址减去起始地址beg ...
- [SDOI2008] 洞穴勘测 (LCT模板)
bzoj 2049 传送门 洛谷P2147 传送门 这个大佬的LCT详解超级棒的! Link-Cut Tree的基本思路是用splay的森林维护一条条树链. splay的森林,顾名思义,就是若干spl ...
- vue watch和computed的使用场景
watch 监听某个数据的变化(监听完调用什么函数) 一个数据影响多个数据 (比如:浏览器自适应.监控路由对象.监控自身属性变化) computed 计算后返回新 一个数据受多个数据影响(比如:计算总 ...
- python基础修改haproxy配置文件
1.通过eval(),可以将字符串转为字典类型. 2.Encode过程,是把python对象转换成json对象的一个过程,常用的两个函数是dumps和dump函数.两个函数的唯一区别就是dump把py ...
- 月薪20k+的测试工程师都会这项技能!
一说到测试,很多人认为就是在一直"点点点"找bug的重复性工作,这是早期手工测试给人的刻板印象,随着测试行业的发展,"会代码"越来越成为测试工程师的一个标签. ...