求救!C语言中如何实现子串截取功能?

sparadise1003 2012-12-22 10:04:33
一直用java编程,C忘的差不多了,求助朋友们帮忙用纯C实现一个类似于java中substring的子串截取功能,模型如下:

char* substring( char* src , int index , int len )
{
……
return desc
}


其中:
src为原字符串指针
index为截取位置
len为截取长度
desc为截取后的字符串指针
...全文
294 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-12-24
  • 打赏
  • 举报
回复
调用约定一定要清晰,一定要有调用举例,一定要说明参数和返回值的局限。
tskshy 2012-12-24
  • 打赏
  • 举报
回复
我认为9楼的想法很好 如果是自己写的函数 很清楚什么时候释放内存 但是假若是给别人调用 有些人是不会看内部实现的 这样他就不会知道是否有内存申请 这样很容易造成内存泄露
xxb249 2012-12-24
  • 打赏
  • 举报
回复
引用 2 楼 turingo 的回复:
C/C++ code?12345678910111213141516171819202122232425#include <stdlib.h>#include <string.h>#include <stdio.h> char* substring(const char* src, int index, int len){ char* str; if(src == ……
顶顶!!
兆帅 2012-12-23
  • 打赏
  • 举报
回复
引用 2 楼 turingo 的回复:
C/C++ code?12345678910111213141516171819202122232425#include <stdlib.h>#include <string.h>#include <stdio.h> char* substring(const char* src, int index, int len){ char* str; if(src == ……
++
Lena-Yang 2012-12-23
  • 打赏
  • 举报
回复
明天 试试看
xingming 2012-12-23
  • 打赏
  • 举报
回复
图灵狗 2012-12-23
  • 打赏
  • 举报
回复
int main(int argc, char* argv[]) { char* str = substring("hello world", 6, 5); printf("%s\n", str); free(str); return 0; }
引用 4 楼 bfdeh 的回复:
楼上三位虽然是把功能实现了,但是内存管理是个问题啊,何时free呢?该不会是想等到进程退出的时候系统自动回收吧?
14号选手 2012-12-23
  • 打赏
  • 举报
回复
不是有一个sscanf的函数吗
bfdeh 2012-12-23
  • 打赏
  • 举报
回复
引用 7 楼 turingo 的回复:
int main(int argc, char* argv[]) { char* str = substring("hello world", 6, 5); printf("%s\n", str); free(str); return 0; } 引用 4 楼 bfdeh 的回复:楼上三位虽然是把功能实现了,但是内存管理是个问题啊,何时fr……
我个人比较建议稍微改下函数原型
char* substring( char* dstbuf ,char* src , int index , int len )
{
  ……
  return dstbuf;
}
因为调用该函数的时候len是已知的,所以建议在substring外部先创建dstbuf,个人意见,供参考。
weidu23 2012-12-22
  • 打赏
  • 举报
回复
我给个建议 你的一定有缺陷的,你要保证你的源字符串不被改变才好! 我给你个定义:char* substring(const char* src, int index, int len) ------------ 在定以后,开始写代码: 首先,你要返回的是一个地址,所以你开始时应该定义一个指针, 至于指针的长度,鉴于\0和\n的问题,可以这样: char * desc = (char *)malloc(sizeof(char)*(len+1))//注:这个加一就是为了防范\0和\n等等问题 ------------ 现在,你要做两个判断, 1、如果传入的字符串为空 2、如果查询的位置超界,即 index < 0 && (index+len) > (int)strlen(src); 符合这两种情况,free(desc);return -1 ------------ 接下来,就是正式的截取了! 2种方法,我写的时候,发现正好楼上2位分别写完了2种,这里就不迂腐,只是带过一句 方法1、利用strncpy()[这是2楼写法] 方法2、你隐式的将他们当成数组[这是1楼写法] ------------- 提示: 如果你想直接用指针,亲,我告诉你,会错的!!! 但是你想办法把const去掉了,那就好,没问题了!
图灵狗 2012-12-22
  • 打赏
  • 举报
回复

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

char* substring(const char* src, int index, int len)
{
  char* str;

  if(src == NULL)
    return NULL;
  if(index + len > strlen(src))
    return NULL;

  str = (char*)malloc(sizeof(char) * (len + 1));
  strncpy(str, src + index, len);

  return str;
}

int main(int argc, char* argv[])
{
  char* str = substring("hello world", 6, 5);
  printf("%s\n", str);
  return 0;
}
  • 打赏
  • 举报
回复
char* substring(char* src,int index,int len) { char *desc=(char*)malloc((len+1)*sizeof(char)); int i; for(i=0;i<len;i++) { if(src[index+i]=='\0') { break; } desc[i]=src[index+i]; } desc[i]='\0'; return desc; } 随便写的
bfdeh 2012-12-22
  • 打赏
  • 举报
回复
楼上三位虽然是把功能实现了,但是内存管理是个问题啊,何时free呢?该不会是想等到进程退出的时候系统自动回收吧?

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧