这道题是什么意思啊,跪求大神解答!!!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;
}

C语言基础,这道题是什么意思呢?
int a = 1 * 2 + 3以上代码中有两个三个运算符‘*’‘=’‘+’由于‘*’也就是乘号优先级别最高(其实就是说最先运算的意思) 又根据‘*’运算符是是双目运算符(这个双目就是指必须运算对象要有两个 即‘*’两边的1和2了)计算1*2得2 表达式变成int a = 2 + 3 此时表达式里面‘...

能帮忙解释一下这道c语言题目吗?
题目要求与条件表达式等价,就是把这个选项替换掉条件表达中的(x-y)时,条件表达式的执行结果不变。条件表达式的需要:(x-y)如果等于true,需要x与y不相等,(x-y)如果等于false,需要x等于y 选项D结果如果为true,则x等于y,如果为false,则x不等于y。正好与要求相反。

给我解释一下这道c语言题目
b++的意思是先做其他运算,之后b再加1 ++b的意思是先加1,再做其他运算 所以a&&0的结果直接为0了,所以后面的&&运算直接忽略不做了,所以c++也没有被执行

C语言,这道题目怎么理解?
答案A,亲自上机验证,保证无错 这里的a<b<c求的是一个逻辑值,正确为1,错误为0,a=1,b=2,c=2,首先a<b成立,逻辑值为1,然后1<c,也成立,所以满足循环条件(逻辑值为0时不满足,为1满足),开始循环,交换a,b位置,再c--,,a=2, b=1, c=1,此时再循环,a<b不成立,逻辑值为...

请教各位学霸这道c语言题该怎么理解?为什么结果是9876 876呢?非常感...
第三次循环指针p的值是p++,也就是(s+2)因为循环终止条件是p<s+2所以退出循环,程序结束.所以输出是"9876 876 ".如果你不明白可以把循环终止条件改成p<s+4,那么程序就会输出"9876 876 76 6 ",每次p指针指向字符数组的后一个字符,每次输出其后面的字符串.我给你一个循环终止条件改成p<s+4后...

求大神解答这道c语言第39题,希望能详细解释一下a等于b等于c那怎么理解...
c 指向同一个地址。逗号运算符,运算顺序自左向右。所以后面的赋值,相当于 a = 1;b = 2;c = 3;此时*a,*b,*c值均为 3。倒数第二行,a = b,因为两者地址完全相等,所以a所指向地址不变。最后一行,最后一个打印的参数是什么?图上没显示 就*a,*b,*c 来说,应该是3,3,3 ...

求大神解答这道c语言题
这里*p=x,是将p的指针指向了x[0]的地址,此时*p=x[0];当运行for循环时*p+=x[i];因此*P的值会变为*p=*p + x[i];不过在循环中有i++和p++,在执行每次循环之后p++将p指向的值后移了一位,而数组的本质也是指针;一次在执行一次循环之后x[0]的值会变为2,而*p因为后移了一位指向了...

谁能帮我解释一下这道c语言题目啊 不懂
1.转换说明符 a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99)c 字符 d 有符号十进制整数 f 浮点数(包括float和doulbe)e(%E) 浮点数指数输出[e-(E-)记数法]g(%G) 浮点数不显无意义的零"0"i 有符号十进制整数(与%d相同)u 无符号十进制整数 o 八进制...

c语言 这道题怎么做? 详细解释一下。x+2是什么意思?
x是数组名,代表数组在内存中的起始地址,x+2代表数组中下标值为2的元素的地址,即x[2]的地址,把x[2]的地址作为实参传给形参变量p,在fun函数中,通过指针p把x[2]元素的姓名成员输出。

c语言:有哪位大侠可以帮我解释一下下面这道题目???
Flag是 被调函数prime里面定义的一个局部变量flag变量 下面的return(flag)这行里面的flag和前面定义的flag是一样的、、、flag也可以自己随意修改、、、下面分析下这个程序具体的步骤 include <stdio.h> \/\/第一行、调取头文件stdio.h int main() \/\/表示一下内容为主函数 {int prime(int); \/\/...

相似回答