纯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应用中很重要,通经常使用来防止用户恶意提交表单,如恶意注冊和登录.论坛恶意灌水等.本文将通过实例 ...
随机推荐
- 压缩感知与稀疏模型——Convex Methods for Sparse Signal Recovery
第三节课的内容.这节课上课到半截困了睡着了,看着大家都很积极请教认真听讲,感觉很惭愧.周末不能熬太晚.这个博客就记录一下醒着时候听到的内容. Motivation 目前的时代需要处理的数据量维度可能很 ...
- 对kotlin和java中的synchronized的浅谈
synchronized在java中是一个关键字,但是在kotlin中是一个内联函数.假如分别在java和kotlin代码锁住同一个对象,会发生什么呢,今天写了代码试了试.首先定义people类 12 ...
- css3动画贝塞尔曲线cubic-bezier,css3动画的五种情况
当大家开始做css3动画的时候,了解贝塞尔曲线就成了不可或缺的.“贝赛尔曲线”是由法国数学家Pierre Bézier所发明,由此为计算机矢量图形学奠定了基础.它的主要意义在于无论是直线或曲线都能在数 ...
- 一、美国国家经济研究局NBER教育经济研究项目工作论文合集
一.美国国家经济研究局NBER教育经济研究项目工作论文合集 (一)项目地址: American National Bureau of Economic Research - Economics of ...
- labview状态机
状态机主要由3部分组成,包括一个while循环,一个条件结构,以及while循环的移位寄存器,其中while循环用于保证程序的持续运行,条件结构用于处理不同状态的执行,移位寄存器用于实现从一个状态跳转 ...
- bat连接映射盘
net use h: \\IP地址\目录 "密码" /user:"用户名"
- JAVA的堆栈和内存、垃圾回收解说
1.有关java健壮性特点的真相 很多书上都说java健壮性的特点是因为java使用数组代替了c++的指针:c++最令人头痛的问题就是内存问题,java的健壮性使编程人员不用再考虑内存的问题:这种观点 ...
- stm32 flash 存储
转载自: http://bbs.elecfans.com/jishu_388272_1_1.html 说到STM32的FLSAH,我们的第一反应是用来装程序的,实际上,STM32的片内FLASH不仅用 ...
- 浅谈javascript函数执行过程
javascript函数执行过程: 1. 为函数创建一个执行环境 2. 复制函数的 [[scopes]] 属性中的对象构建起执行环境的作用链域 3. 创建函数活动对象并推入执行环境作用链域的前端 4. ...
- (七)spring+druid多数据源配置
druid多数据源配置 一.druid简介 Druid首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser. ...