在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. Spring的分模块开发的配置

    参考:Spring学习笔记-Spring的分模块开发的配置 在加载配置文件的时候,加载多个 例如把applicationContext.xml配置文件中的关于集合配置的部分剪切到application ...

  2. MSSS攝影大賽計劃書(第三版)

    比賽內容:對香港的城市風景以及自然風光的攝影 預期成果: 提升同學對香港的認識,鼓勵學生走出大學學園去瞭解香港,同時豐富會員的課餘活動,培養同學的興趣愛好 比賽時間:4月1-15日 最後作品提交時間: ...

  3. Java 线程总结(十四)

    1.在异步任务进程中,一种常见的场景是,主线程提交多个异步任务,然后希望有任务完成就处理结果,并且按任务完成顺序逐个处理,对于这种场景,Java 并发包提供了一个方便的方法,使用 Completion ...

  4. EventBus 3.0 的基本使用

    EventBus 3.0 的基本使用 1.什么是EventBus? EventBus 是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间.组件与后台线程间 ...

  5. 不疯“模”不成活,海尔阿里II代电视将极致进行到底

    我去过很多现场,经历过很多新品发布,各种概念,各种颠覆,有点见怪不怪.这次受邀海尔阿里II代电视发布会,本也是带着一颗平常心. 2点30分发布会准时开场,当 "智慧模块"在讲解员手 ...

  6. 使用apktool反编译apk文件

    Apktool https://ibotpeaches.github.io/Apktool/install/ 下载地址:Apktool https://bitbucket.org/iBotPeache ...

  7. SWUST OJ NBA Finals(0649)

    NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128   Descri ...

  8. Appium移动自动化测试实例-基于python

    一.环境搭建 安装Android 环境变量.SDK.Android API.ADT等. 步骤1  安装SDK:下载地址为https://pan.baidu.com/s/1mi6PT9m.如提示错误:' ...

  9. JSP Connect Database

    JDBC简介 在Java技术中,访问数据库的技术叫做JDBC,它提供了一系列的API,让Java语言编写的代码连接数据库,对数据库进行添加.删除.修改和查询. JDBC相关的API存在java.sql ...

  10. grep显示前后几行信息

    显示foo及前5行 1 grep -B 5 foo file 显示foo及后5行 1 大专栏  grep显示前后几行信息ode"> grep -A 5 foo file 显示 file ...