这道题是什么意思啊,跪求大神解答!!!C语言的题目

函数cut的原型为:void *cut(char
*s,int m,int n);,其功能是:从字符串s中第m个位置开始,截取含有n个字符的子串;若从m开始剩余的字符不足n个,则截取剩余的所有字符;函数返回所截子串的首地址。编制函数reverse并用相应的主函数进行测试。

#include <stdio.h>
#include <string.h>

#define N   200

char* cut(char s[], int m, int n);

int main()
{
    int m = 0, n = 0;
    char s[N] = { 0 };
    char* p = NULL;

    printf("请输入一个字符串,长度小于%d:\n", N);
    scanf("%s", s);

    printf("请输入截取的位置:");
    scanf("%d", &m);

    printf("请输入截取的长度:");
    scanf("%d", &n);

    p = cut(s, m ,n);
    if ( p )
    {
        printf("\n你截取到的字符为:\n%s\n\n", p);
    } 
    else
    {
        printf("\n截取字符串失败!\n\n");
    }

    return 0;
}

char* cut(char s[], int m, int n)
{
    int len = strlen(s);

    if ( len<=0 || m<0 || m >= len || n<=0 )
    {
        return NULL;
    }

    if ( m+n < len )
    {
        *(s+m+n) = '\0';
    }

    return s+m;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-27
void* cut(char * s,int m,int n){
int size=strlen(s);
if(m<1){
if(n>=s)return s;
s[n+1]='\0';
return s;
}
if(n<1){
s[0]='\0';
return s;
}
if(s=<m+n)return &s[m];
s[m+n+1]='\0';
return &s[m];
}//不重新分配内存
void * cut2(const char *s,int m,int n){
char *p;
int size=strlen(s),i;
if(m<1){
size=min(size,n);
p=new char[size+1];
for( i=0;i<size;i++)p[i]=s[i];
p[size]='\0';
return p;
}
if(size<=m){
p=new char;
*p='\0';
return p;
}
size=min(size-m,n);

p=new char[size+1];
for( i=0;i<size;i++)p[i]=s[m+i];
p[size]='\0';
return p;
}本回答被提问者和网友采纳
第2个回答  2013-06-27
#include <stdio.h>
#include <string.h>

void *cut(char *s, int m, int n)
{
 int i, len;
 char *tmp;

 len = strlen(s);
 
 while(*s != '\0')
 {
  
  m--;
  s++;
  if(m==0)
  {
   tmp=s; //保留第m个字符的指针
   break;
  }
 }
 if(m+n >= len)
 {
  return tmp;
 }

 else
 {
  for(i=0; i<n; i++)
  {
   tmp[i]=*s;
   s++;
  }
  tmp[n]='\0'; //字符串结束标志
  return tmp;
 }
}


int main()
{
 int m, n;
 char *ptr;
 char buff[20] = {0};

 printf("please input a string:");
 gets(buff);
 printf("please input m, n:");
 scanf("%d, %d", &m, &n);
 ptr = cut(buff, m, n);
 printf("After cut,buff is %s.\n", ptr);
 return 0;
}

相似回答