以指针方式,通过子函数实现。定义一个子函数,函数原型为char * substr(char *str, char *sub, int begin, int end ),功能:在字符串str中求一个字串,起始位置为begin,终止位置为end,内容存入subsub所指的空间中。成功则返回指向sub的指针,失败则返回NULL。假设begin>end,或者begin>=strlen(str),则求子串失败,返回NULL。假设end>strlen(str),则将begin位置后面的字符全部拷入到sub中,并返回指向sub 的指针。字符串的下标从0开始,即begin可以为0。
下面是一个实现,供参考:
#include <stdio.h>
#include <string.h>
char * substr(char *str,char *sub,int begin,int end){
// 如果起始位置大于结束位置,或者起始位置大于字符串的最大字符位置(不含字符串结尾的空字符),或者起始位置小于0,则返回NULL
if(begin>end||begin>=strlen(str)||begin<0){
return NULL;
}
int i,j=0;
if(end>strlen(str)){ // 如果结束位置超过字符串结尾的空字符
for(i=begin;str[i]!='\0';i++,j++){ // 复制从起始位置到字符串str最后一个字符位置结束
sub[j]=str[i];
}
sub[j]='\0'; // 补上字符串结尾的空字符
}else{ // 果结束位置没有超过字符串结尾的空字符
for(i=begin;i<=end;i++,j++){ // 复制从起始位置到结束位置结束
sub[j]=str[i];
}
sub[j]='\0'; // 补上字符串结尾的空字符
}
return sub;
}
int main(void){
char str[100];
printf("请输入一个字符串:");
gets(str);
int begin,end;
printf("请输入要截取字符串的起始位置和结束位置:");
scanf("%d %d",&begin,&end);
char sub[100];
char * result= substr(str,sub,begin,end);
if(result==NULL){
printf("截取字符串失败!\n");
}else{
printf("截取的字符串为:%s\n",result);
}
return 0;
}