c语言有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串

2024-12-05 05:55:43
推荐回答(3个)
回答1:

#include<stdio.h>

void main(){

void copy(char*,int,int);

int n,m;

char string[100];

printf("enter a number n:");

scanf("%d",&n);

printf("enter a string:");

scanf("%s",&string);

printf("enter a number m:");

scanf("%d",&m);

copy(string,n,m);

return 0;

}

void copy(char*str,int n,int m){

int i,j;

char string[100];

char*p=string;

i=m-1;

j=0;

str=str+i;

for(;i<n;i++,j++){

*(p+j)=*(str++);

printf("%c\n",*(p+j));

}

}

扩展资料:

printf用法

//以下程序用于获得输入值i,j并将其输出(i,j之间以逗号隔开)

#include<stdio.h>

int main()

{

int i,j;

scanf("%d%d",&i,&j);

printf("i=%d;j=%d",i,j);

return 0;

}

//以下程序用于输出“百度百科”

#include<stdio.h>

int main()

{

printf("百度百科");

return 0;

}

format

Format参数是包含三种对象类型的一个字符串:

*无格式字符复制到输出流;

*转换规范,每个规范导致在值参数列表中检索1个或更多个项;

*转义序列。

通常意义上format的格式如下:

%[flags][width][.prec][F|N|h|l]type

回答2:

#include 
#include 
int main()

    int m; 
    void copy(char *s1,char *s2,int m);
    char s1[20];
    char s2[20];
    //n=sizeof(s1)/sizeof(int);
    //n=sizeof(s1)会返回20,但这明显不是你需要的
    gets(s1);
    printf("输入字符串为:%s ",s1);
    //这里用strlen(s1)可以得到实际字符串长度
    scanf("%d",&m);
    printf("m的值为:%d",m);
    copy(s1,s2,m);
    printf("result:%s\n",s2);
    return 0;
}
void copy(char *p1,char *p2,int m)
{
    int i=m;
    while(*(p1+i-1))
    {//没有必要纠结于n,直接通过字符串结束符判断就可以了
        *(p2+i-m)=*(p1+i-1);
    }
}

这样和你的程序更接近一些吧

回答3:

这样就好了:

#include "stdafx.h"
#include 
#include 
int main()

int m,n; 
void copy(char *s1,char *s2,int m);
char s1[20];
char s2[20];
printf("输入字符串: ");
gets(s1);
printf("输入m的值: ");
scanf("%d", &m);
copy(s1,s2,m);
printf("result: %s\n",s2);
getchar();
return 0;
}

void copy(char *p1, char *p2, int m)
{
p1 += m;            // 移到第m个字符串
while(*p1)            // 如果p1当前不为空,则复制,如果为'\0'就结束吧
{
*p2 = *p1;            // 复制当前字符
++p1;            // 向后移动
++p2;            // 向后移动
}
*p2 = *p1;            // 设置p2为'\0'
}