[置顶] C语言,从字符串中提取一个字符串,int substr(char dst[], char src[],int start,int len)
2016-10-16 20:26
260 查看
C语言,从字符串中提取一个字符串,int substr(char dst[], char src[],int start,int len)
目标是:从src数组的起始位置开始向后偏移start个字符的位置开始, 最多复制len个非NUL字符到dst数组中,在复制完毕之后,dst 必须以NUL结尾,函数的返回值是存储于dst 数组的字符串的长度
方法一:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include<assert.h>
int strlen(char * string)
{
int length;
for(length=0;*string++!='\0';)
length+=1;
return length;
}
int substr(char dst[], char src[],int start,int len)
{
char* sc = src+start;
int n = strlen(sc);
int i = 0;
int **ret=NULL;
assert(dst != NULL );
assert(src != NULL );
if(n < len)
{
len = n;
}
while(len)
{
dst[i] = sc[i];
len--;
i++;
}
dst[i] = '\0';
}
int main()
{
char string[]="hello-my-college";
char string1[100]={0};
int ret=0;
int num=0;
int count=0;
printf("please the len and the num is:\n");
scanf("%d%d",&num,&count);
ret=substr(string1,string,num,count);
printf( "目的数组长度 : %d \n",count);
printf( "目的数组为: %s \n",string1);
system("pause");
return 0;
}
方法二:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include<assert.h>
#include<math.h>
int strlen(char * string)
{
int length;
for(length=0;*string++!='\0';)
length+=1;
return length;
}
int substr( char dst[], char src[], int start, int len )
{
char *temp = dst;
int dst_len = 0;
int src_len = strlen(src);
int i=0;
assert( dst != NULL && src != NULL );
if( start<0 || len<=0 || src_len < start )
printf( "提取位置或字符个数不符合要求 !\n" );
for( i=0; i<start; i++ )
src++;
//while( (*temp++ = *src++) != '\0' && dst_len < len )
while( dst_len < len && (*temp++ = *src++) != '\0' ) // 若把比较长度放在后面,就会多复制一个字符
dst_len++;
*temp = '\0';
return dst_len;
}
int main()
{
char string[]="hello-my-college";
char string1[100]={0};
int ret=0;
int num=0;
int count=0;
printf("please the len and the num is:\n");
scanf("%d%d",&num,&count);
ret=substr(string1,string,num,count);
printf( "目的数组长度 : %d \n",count);
printf( "目的数组为: %s \n",string1);
system("pause");
return 0;
}
C语言,从字符串中提取一个字符串,int substr(char dst[], char src[],int start,int len)
目标是:从src数组的起始位置开始向后偏移start个字符的位置开始, 最多复制len个非NUL字符到dst数组中,在复制完毕之后,dst 必须以NUL结尾,函数的返回值是存储于dst 数组的字符串的长度
方法一:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include<assert.h>
int strlen(char * string)
{
int length;
for(length=0;*string++!='\0';)
length+=1;
return length;
}
int substr(char dst[], char src[],int start,int len)
{
char* sc = src+start;
int n = strlen(sc);
int i = 0;
int **ret=NULL;
assert(dst != NULL );
assert(src != NULL );
if(n < len)
{
len = n;
}
while(len)
{
dst[i] = sc[i];
len--;
i++;
}
dst[i] = '\0';
}
int main()
{
char string[]="hello-my-college";
char string1[100]={0};
int ret=0;
int num=0;
int count=0;
printf("please the len and the num is:\n");
scanf("%d%d",&num,&count);
ret=substr(string1,string,num,count);
printf( "目的数组长度 : %d \n",count);
printf( "目的数组为: %s \n",string1);
system("pause");
return 0;
}
方法二:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include<assert.h>
#include<math.h>
int strlen(char * string)
{
int length;
for(length=0;*string++!='\0';)
length+=1;
return length;
}
int substr( char dst[], char src[], int start, int len )
{
char *temp = dst;
int dst_len = 0;
int src_len = strlen(src);
int i=0;
assert( dst != NULL && src != NULL );
if( start<0 || len<=0 || src_len < start )
printf( "提取位置或字符个数不符合要求 !\n" );
for( i=0; i<start; i++ )
src++;
//while( (*temp++ = *src++) != '\0' && dst_len < len )
while( dst_len < len && (*temp++ = *src++) != '\0' ) // 若把比较长度放在后面,就会多复制一个字符
dst_len++;
*temp = '\0';
return dst_len;
}
int main()
{
char string[]="hello-my-college";
char string1[100]={0};
int ret=0;
int num=0;
int count=0;
printf("please the len and the num is:\n");
scanf("%d%d",&num,&count);
ret=substr(string1,string,num,count);
printf( "目的数组长度 : %d \n",count);
printf( "目的数组为: %s \n",string1);
system("pause");
return 0;
}
相关文章推荐
- [置顶] C语言,从字符串中提取一个字符串,int substr(char dst[], char src[],int start,int len)目标是:从src数组的起始位置开始向后偏移star
- 编写一个函数,它从一个字符串中提取一个子字符串。函数原型如下: Int substr(char dst[], char src[],int start, int len) {} 目标是:从src数组
- int substr( char dst[], char src[], int start, int len )
- 编写一个函数,删除字符串中的一段字符,函数原型为: int fun(char *p,int start,int end); 返回值为删除字符数, start 开始位置,end 结束位置。
- Linux下用C语言将一个字符串格式(char*)的MAC地址转换为十六进制数组
- C语言 编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。
- CString、char、string、int、_bstr_t、CTime、COleDateTime相互转换&amp;判断一个字符串是一个浮点数
- 我用c#写了一个测试样例,分析了int,char,datetime和varchar的日志情况而且没有考虑null和空字符串的保存,希望感兴趣的朋友能和我一起交流打造属于自己的日志分析工具
- C语言 编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列
- C语言 编写一个函数,它从一个字符串中提取一个子字符串。
- C语言 编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数。
- C语言 编写一个函数,它从一个字符串中提取一个子字符串
- 第25题: 写一个函数,它的原形是int continumax(char *outputstr,char *intputstr),在字符串中找出连续最长的数字串,并把这个串的长度返回
- C语言 将一个数字字符串转换成这个字符串对应的数字(包括正浮点数、负浮点数 函数原型:double my_atof(char *str)
- 【C语言】用一个函数,从一个字符串中提取一个子字符串。
- 【C语言】编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。要求:不能使用C函数库中的字符串操作函数。
- Linux下用C语言将一个字符串格式(char*)的MAC地址转换为十六进制数组
- 【练习】写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,
- c语言 char*类型作为中间变量将许多字符串保存到一个数组的问题
- 程序猿之---C语言细节1(==与=、函数指针、数组字符串printf、int ((b));、char b =‘abcd’)