社区
C语言
帖子详情
C里面没有SubStr();这个函数?请什么方法可最快实现!
mycoolu
2003-08-19 03:51:32
C里面没有SubStr();这个函数?请什么方法可最快实现!
...全文
571
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】MySQL中
substr
函数
使用详解
MySQL 的
SUBSTR
函数
是一种用于从字符串中提取子字符串的强大工具,广泛应用于数据处理和文本分析。本文详细介绍了
SUBSTR
函数
的基本语法和不同用法,包括从特定位置开始提取、提取特定长度的子字符串等。通过实际案例,例如从电子邮件提取域名和在文本中提取关键词,展示了
SUBSTR
函数
的实际应用。此外,
SUBSTR
还能与其他字符串操作
函数
(如 CONCAT、TRIM、INSTR)结合使用,以
实现
更复杂的数据处理任务。尽管
SUBSTR
大多数情况下性能高效,但处理大数据量时需注意优化。常见问题
substr
函数
c语言
实现
,
substr
是什么
函数
?怎么用
c语言
substr
函数
是什么意思c语言标准库
函数
中是
没有
substr
函数
的,除非你自定义
实现
。 c++语言标准库中的string类包含了一个
substr
函数
。 在MSDN中,关于该
函数
的描述如下:
函数
原型: basic_string
substr
(size_type pos = 0, size_type n = npos) const; 功能描述: Th
substr
方法
返回一个从指定位置开始...
C++中的
substr
()
函数
详解
我们可以运行三个嵌套循环,最外面的循环选择起始字符,中循环将选择的字符右边的所有字符视为子字符串的结束字符。最
里面
的循环从当前选择的起点打印字符到选择的终点。len:子字符串的长度。s.
substr
(i,len)从字符串s中的索引i开始打印长度为len的子字符串。作为参数,并返回一个新构造的字符串对象,其值初始化为该对象的子字符串的副本。在此字符串和字符被给定,并且您必须打印子字符串,后跟给定的字符。我们需要编写一个程序,以打印该给定字符串的所有非空子字符串。大于字符串的大小,则返回的子字符串为。
C++中
substr
()
函数
用法详解
定义
substr
()是C++语言
函数
,主要功能是复制子字符串,要求从指定位置开始,并具有指定的长度。如果
没有
指定长度_Count或_Count+_Off超出了源字符串的长度,则子字符串将延续到源字符串的结尾。——摘自百科词条 语法
substr
(size_type _Off = 0,size_type _Count = npos) 一种构造string的
方法
形式 : s.
substr
(pos,...
Linux C代码
实现
substr
函数
(类似于PHP中的
substr
函数
)
目录 一、PHP
substr
()的用法详解 定义和用法 语法 技术细节 二、Linux C代码
实现
substr
函数
三、测试验证 一、PHP
substr
()的用法详解 定义和用法
substr
()
函数
返回字符串的一部分。 注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。 语法
substr
(string,st...
C语言
70,038
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章