c语言有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串
#include
int main() { int m,n; void copy(char *s1,char *s2,int m); char s1[20]; //n=sizeof(s1)/sizeof(int); char s2[20]; printf("输入字符串为:%s ",s1); gets(s1); / printf("m的值为:%d",m); scanf("%d",&m); copy(s1,s2,m); printf("result:%s\n",s2); return 0; } void copy(char *p1,char *p2,int m) { int i; //char s1[n]; //char s1[20]; //char s1[n]; for(i=m;i<n;i++) { *(p2+i-m)=*(p1+i-1); } } 出错,因为n未定义,应该怎么处理呢,我用了n=sizeof(s1)/sizeof(int);也不行
#include <stdio.h>
#include <string.h>
int main()
{
int m,n;
void copy(char *s1,char *s2,int m);
char s1[20];
//n=sizeof(s1)/sizeof(int);
char s2[20];
printf("输入字符串为:%s ",s1);
gets(s1);
/
printf("m的值为:%d",m);
scanf("%d",&m);
copy(s1,s2,m);
printf("result:%s\n",s2);
return 0;
}
void copy(char *p1,char *p2,int m)
{
int i;
for(i=m;i<n;i++)
{
*(p2+i-m)=*(p1+i-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
#include <stdio.h>
#include <string.h>
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);
}
}
这样和你的程序更接近一些吧
好像这样还是不太对,说我m值没初始化,什么意思啊,是警告
#include <stdio.h>
#include <string.h>
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\n",s1);
//这里用strlen(s1)可以得到实际字符串长度
scanf("%d",&m);
printf("m的值为:%d\n",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);
i++;
}
*(p2+i-m)=0;
}
调试了一下,这次可以了。另外,我这没有m的警告错误
这样就好了:
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
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'
}