社区
C语言
帖子详情
C里面没有SubStr();这个函数?请什么方法可最快实现!
mycoolu
2003-08-19 03:51:32
C里面没有SubStr();这个函数?请什么方法可最快实现!
...全文
560
31
打赏
收藏
C里面没有SubStr();这个函数?请什么方法可最快实现!
C里面没有SubStr();这个函数?请什么方法可最快实现!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
31 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Cybergate
2003-08-26
打赏
举报
回复
begincsdn(begincsdn):
我开始也考虑过用返回静态数组的方法,但后来发现用起来特别费劲。因为每次调用substr它的内容都会被修改。如果要多次调用的substr话每次还要把每次的结果“备份”下来,实际上相当于复制了两次,大大降低了效率。其实最好的方法就是仿照库函数的接口,即标准的C风格。
Cybergate
2003-08-26
打赏
举报
回复
抱歉,刚刚那个程序还有点小问题,健壮性也不太好
不过,即使加入所有的条件判断,函数也不长。
采用size_t类型防止负数,并加入了对NULL, “字符串长度小于等指定的位置”,以及可复制长度不够的判断。程序也就四行。
#include <stdio.h>
#include <assert.h>
void SubStr(char *szDest, const char *szSrc, size_t nPos, size_t nLen)
{
assert(szDest); assert(szSrc);
while (*szSrc && nPos--) szSrc++;
while (*szSrc && nLen--) *szDest++=*szSrc++;
*szDest='\0';
}
main()
{
char a[]="Hello world";
SubStr(a, a, 10, 3); // 从第十个起取三个,实际上只有一个d
puts(a);
}
俞庆平
2003-08-26
打赏
举报
回复
//更正: //如果字符串长度小于等指定的位置。
俞庆平
2003-08-26
打赏
举报
回复
补充两句:
在处理这个问题的时候,首先我们不能强求用户指定一个非空的字符串,
同时也不能将错误直接丢给用户来处理,因为assert是方便调试使用,
应该尽可能地将错误状态捕捉并作相应的处理。
俞庆平
2003-08-26
打赏
举报
回复
楼上还有错误,pos,length的符号没有判断。
如果strDest的长度小于length怎么办?
如果pos的大小大于strlen(strDest)怎么办?
对于strDest和strSrc 为NULL时,特别是strSrc为NULL直接返回""即可。
const int MAX_STRING_LENGTH = 256;
char * substr(char * srcstr,int pos , int length)
{//纯C的写法是:pos从0开始计数,如果有错漏,望不吝赐教!
static char paddr[MAX_STRING_LENGTH] = "";
if(pos < 0 || length < 1 || srcstr == NULL) return paddr;
int slen = (int)strlen(srcstr);
if(slen - 1 <= pos) //如果长度大于等指定的位置。
return paddr;
char * ppos = (char *)(&srcstr[pos]);//取得位置
if(slen - 1 - pos <= length)
slen -= pos;
else slen = length;
strncpy(paddr,ppos,slen);
paddr[slen] = '\0';
return paddr;
}
foxfur
2003-08-26
打赏
举报
回复
不好意思,上面的程序有些错误!改正如下:
char *substr(char *strDest, const char *strSrc, int posi, int length);
{
assert((strDest!=NULL) && (strSrc !=NULL));
char *address = strDest;
for(; ((length > 0) && (*strDest++ = strSrc[posi++])); length--);
return address;
}
hellobcb
2003-08-26
打赏
举报
回复
#include <stdio.h>
int substr(char *str1,int begin,int count,char *str2)
{
while(begin>0&&count>0&&begin+count<=strlen(str1)+1)
{
char *temp;
int i;
for(i=0,temp=str1+begin-1;i<count;i++,temp++)
str2[i]=*temp;
str2[count]='\0';
return 1;
}
return 0;
}
main()
{
char *str2;
char *str1="abcdeft";
str2=(char *)malloc(strlen(str1));
if(substr(str1,2,3,str2))
printf("%s\n",str2);
else
printf("please check your parameters!\n");
free(str2);
return 0;
}
esupermary
2003-08-26
打赏
举报
回复
楼上的,你是个高手呀。
foxfur
2003-08-26
打赏
举报
回复
这个怎样?加入assert可以在程序运行中报错,防止系统崩溃!!:)
strDest: 目的指针
strSrc: 源指针
posi: 拷贝的起始位置(从该位置开始拷贝)
length: 拷贝的长度
char *substr(char *strDest, const char *strSrc, int posi, int length);
{
assert((strDest!=NULL) && (strSrc !=NULL));
char *address = strDest;
for(; ((length > 0) && (*strDest++ = * strSrc++)); length--);
return address;
}
Cybergate
2003-08-26
打赏
举报
回复
好难??只要一行就行了
void substr(char *dest, const char *src, int start, int end)
{
while (start<=end&&(*dest++=src[start++]));
}
用法:
substr(a, "Hello world", 1, 9) 将Hello world的第一个(H是第零个)到第九个复制到a中,a就是子串
mycoolu
2003-08-26
打赏
举报
回复
哎!!求一个SUBSTR();函数好难呀 !!!!标准C的!
lwk_hlj
2003-08-26
打赏
举报
回复
#include <stdio.h>
#include <stdlib.h>
int substr( char *source,int startx,int length,char *tt)
{
int i=0;
int iCount=0;
int j=0;
iCount=strlen(source);
if (startx>=iCount)
{
return 1;
}
for (i=0;i<length;i++)
{
tt[j]=source[i+startx];
j++;
}
return 0;
}
int main(int argc, char *argv[])
{
char *str="0123456789";
char *ttt;
int i=0;
ttt=malloc(3);
i=substr(str,5,3,ttt);
printf("%s\n",ttt);
system("PAUSE");
return 0;
}
mycoolu
2003-08-26
打赏
举报
回复
不行!!!
mycoolu
2003-08-26
打赏
举报
回复
结贴!
hellobcb
2003-08-19
打赏
举报
回复
楼上:局部变量的地址可以返回吗?
#include <stdio.h>
#include <string.h>
int substr(char *str1,int begin,int count,char *str2)
{
while(begin>0&&count>0&&begin+count<=strlen(str1))
{
char *temp;
int i;
for(i=0,temp=str1+begin-1;i<count;i++,temp++)
str2[i]=*temp;
str2[count]='\0';
return 1;
}
return 0;
}
main()
{
char *str2;
char *str1="abcdeft";
if(substr(str1,2,5,str2))
printf("%s\n",str2);
else
printf("please check your parameters!\n");
return 0;
}
xiaoxuw
2003-08-19
打赏
举报
回复
char* SubStr(char* Str,long start,long len)
{
char* Res="";
long i=0;
while(Str[i]!='\0')
{
if(i>=start && i<=start+len)
{
strcat(Res,&Str[i]);
}
else if(i>start+len)
{
break;
}
i++;
}
return Res;
}
hellobcb
2003-08-19
打赏
举报
回复
加上#include <string.h>是可以的。
mycoolu
2003-08-19
打赏
举报
回复
哎!写个函数是不难,但是对自己的函数不满意!
strncpy不认呀!要是认的话我还会问吗!
所以上来问问各位大侠!
aflyinghorse
2003-08-19
打赏
举报
回复
strncpy();就是C语言的库函数
在#include <string.h>中声明
yurius
2003-08-19
打赏
举报
回复
自己写个函数应该不难吧
加载更多回复(11)
mysql-5.7.13-winx64.msi(Mysql5.7安装包)
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 https://.com/docker-library/mysql Maintained by: the Docker Community and the MySQL Team This is the Git repo of the Docker "Official Image" for (not to be confused with any official image provided by upstream). See the Docker Hub page for the full readme on how to use this Docker image and for information regarding contributing and issues. The full image description on Docker Hub is generated/maintained over in the docker-library/docs repository, specifically in the directory. See a change merged here that doesn't show up on Docker Hub yet? For more information about the full official images change lifecycle, see the "An image's source changed in Git, now what?" FAQ entry. For outstanding i...
技术转移服务公司深陷高端成果与需求端断层困境?创新要素智能配置系统或成破局关键.docx
深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化服务,推动科技创新与产业创新智能化发展。
【SMS Backup and Restore】
短信导出
微信小程序自定义组件开发项目-树形数据表格组件-支持多层级数据展示与交互-用于企业管理系统数据可视化展示-前端开发工具-数据表格渲染优化-微信小程序开发框架-自定义组件封装-树形结.zip
微信小程序自定义组件开发项目_树形数据表格组件_支持多层级数据展示与交互_用于企业管理系统数据可视化展示_前端开发工具_数据表格渲染优化_微信小程序开发框架_自定义组件封装_树形结.zipAI + 数据分析助手
基于springboot课程答疑系统设计与
实现
.7z(源码+论文)
目录 1系统概述 1.1 研究背景 1.2研究目的 1.3系统设计思想 2相关技术 2.1 MYSQL数据库 2.2 B/S结构 2.3 Spring Boot框架简介 2.4 VUE框架 3系统分析 3.1可行性分析 3.1.1技术可行性 3.1.2经济可行性 3.1.3操作可行性 3.2系统性能分析 3.2.1 系统安全性 3.2.2 数据完整性 3.3系统界面分析 3.4系统流程和逻辑 4系统概要设计 4.1概述 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细
实现
5.1 管理员模块的
实现
5.1.1 学生信息管理 5.1.2 科目类型管理 5.2 老师模块的
实现
5.2.1 老师回答管理 5.2.1 我的收藏管理 5.2 学生模块的
实现
5.2.2 学生问题 5.2.3 留言反馈 5.2.3 交流区 6系统测试 6.1概念和意义 6.2特性 6.3重要性 6.4测试
方法
6.5 功能测试 6.6可用性测试 6.7性能测试 6.8测试分析 6.9测试结果分析 结论 致谢语 参考文献
C语言
70,038
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章