在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的更多相关文章

  1. php strpos() 函数介绍与使用方法详解

    本文主要和大家介绍PHP中mb_strpos的使用技巧,通过使用语法以及实例给大家详细分析了用法,需要的朋友参考学习下.希望能帮助到大家.mb_strpos(PHP 4 >= 4.0.6, PH ...

  2. php生成各种验证码

    片段 1 片段 2 片段 3 index.html ```<script type="text/javascript" src="jquery.min.js&quo ...

  3. [译] 给PHP开发者的PHP源码-第一部分-源码结构

    文章来自:http://www.hoohack.me/2016/02/04/phps-source-code-for-php-developers-ch 原文:http://blog.ircmaxel ...

  4. [php入门] 2、基础核心语法大纲

    1 前言 最近在学PHP,上节主要总结了PHP开发环境搭建<[php入门] 1.从安装开发环境环境到(庄B)做个炫酷的登陆应用>.本节主要总结PHP的核心基础语法,基本以粗轮廓写,可以算作 ...

  5. PHP利用jquery生成各种验证码和Ajax验证

    PHP生成验证码图片 PHP生成验证码的原理:使用PHP的GD库,生成一张带验证码的图片,并将验证码保存在Session中.PHP 生成验证码的大致流程有: .产生一张png的图片: .为图片设置背景 ...

  6. php 解析 视频 信息 封面 标题 图片 支持 优酷, 土豆 酷6 56 新浪 qq播客 乐视 乐视

    原文地址:http://www.lianyue.org/2013/2497/ <?php /** * 解析 视频信息 类 * * 支持 优酷, 土豆 酷6 56 新浪 qq播客 乐视 乐视 ** ...

  7. 一个PHP写的简单webservice服务端+客户端

    首先是服务端,服务端有一个主要的class组成:apiServer.php <?php /** * apiServer.php * * webservice主类 * * @filename ap ...

  8. Curl 采集乱码 gzip 原因及解决方案 utf-8

    用curl获取一个经过gzip压缩后的网页时返回乱码 原因大体就是服务器返回的Content-Encoding的值和网页的编码不同,造成curl解码出问题,直接将gzip或deflate编码的文件下载 ...

  9. 【代码实现】PHP生成各种随机验证码

    原文地址:http://www.phpthinking.com/archives/531 验证码在WEB应用中很重要,通经常使用来防止用户恶意提交表单,如恶意注冊和登录.论坛恶意灌水等.本文将通过实例 ...

随机推荐

  1. WAIC | 奇点云携「酷炫AI应用」亮相2019世界人工智能大会

    你是否还在疑惑“人工智能可否改变世界?” 那么,你该有一些危机感了. 机器视觉.自然语言处理.智能语音.机器人问诊.智慧驾驶……这些AI技术及应用早已渗入了我们日常生活的点滴. 29日,以「智联世界, ...

  2. 吴裕雄--天生自然python学习笔记:pandas模块用 dataframe.loc 通过行、列标题读取数据

    用 df.va lue s 读取数据的前提是必须知道学生及科目的位置,非常麻烦 . 而 df.loc 可直接通过行.列标题读取数据,使用起来更为方便 . 使用 df.loc 的语法为: 行标题或列标题 ...

  3. maxquant|

    使用maxquant 设定修饰: 设定打分值: 设定有标定量方法:iBAQ,虽然是无标定量方法,但是设定该值后也会有相应有标定量方法的iBAQ值. 根据计算机性能设定线程数: 设定酶切位点 最后生成文 ...

  4. python学习笔记(3)数据类型-列表list

    序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但最常见的是列表和元组. 序列 ...

  5. linux系统开机静态分配ip地址

    在/etc/sysconfig/network-scripts/ifcfg-eth0文件中 添加: IPADDR=192.168.1.100(设置静态地址) NETMASK=255.255.255.0 ...

  6. deeplearning.ai 序列模型 Week 2 NLP & Word Embeddings

    1. Word representation One-hot representation的缺点:把每个单词独立对待,导致对相关词的泛化能力不强.比如训练出“I want a glass of ora ...

  7. mybatis generator 使用教程(生成带注释的实体类)

    引言: 最近的一个项目,由于数据库表巨多,导致需要创建N多个java实体.dao.mapper.xml映射文件,如果均使用纯手工编写,无疑需要耗费大量时间和精力.于是上网学习了mybatis gene ...

  8. Visual Studio通过Cordova支持混合跨平台移动开发

    Microsoft在Visual Studio 2013 Update 2中添加了对混合跨平台移动应用程序的本地支持. Microsoft早在2011年就已经开始了与PhoneGap的合作,那时候是为 ...

  9. Java完成生产者消费者模型

    生产者和消费者模型,是多线程中的典型模型,这里使用Java完成该模型 ServerTest.java 生产者代码 package com.orange.threadmodel; import java ...

  10. 吴裕雄--天生自然KITTEN编程:切换角色