Description |
实现函数SubString (&Sub, S, pos, len)求子串。(说明:不得使用任何库函数,字符串的存储结构为堆分配存储) 不用考虑无效的pos和len的情况。 Input 输入为三项:分别为一个字符串以及要取子串的开始位置以及长度。 Output输出为子串 |
Sample Input |
This is a program! 6 2 |
Sample Output |
is |
#include<stdio.h>
#include<bits/stdc++.h>
#include<iostream>
#define Max_str 255
using namespace std;
typedef struct{//存储结构
char *ch;
int length;
}Hstring;
void initString(Hstring &S){//初始化字符串
S.ch=new char[Max_str];
S.length=Max_str;
for(int i=0;i<S.length;i++){
S.ch[i]='\0';
}
}
void Strass(Hstring &S,char *chars){//生成字符串
int i=0;
char *c;
for(i=0,c=chars;*c;i++,c++);//求长度
for(int j=0;j<i;j++){
S.ch[j]=chars[j];
}
S.length=i;
}
void Substring(Hstring &Sub,Hstring S,int pos,int len){//从第pos个位置取长度为len的字符串sub
if(Sub.ch) free(Sub.ch);
Sub.ch=(char *)malloc(len*sizeof(char));//分配空间
int j=0;
for(int i=pos-1;i<pos+len-1;i++){
Sub.ch[j]=S.ch[i];
j++;
}
Sub.length=len;
}
void Strprint(Hstring S){//输出字符串
for(int i=0;i<S.length;i++){
cout<<S.ch[i];
}
}
int main(){
Hstring S,Sub;
initString(S);
initString(Sub);
int len,pos;
char chars[Max_str];
gets(chars);//输入(不吃空格)
Strass(S,chars);
cin>>pos>>len;
Substring(Sub,S,pos,len);
Strprint(Sub);
return 0;
}