编写取子字符串函数void fun(char s1[],char s2[],int m,int n),其作用是将字符数组s2中从第m个字符开始
这么写 错在哪?
#include<stdio.h>
void fun(char s1[],char s2[],int m,int n)
{
int len=0;
while(s2[len]) len++;
for (;m<=len && (s1-&s1[0])<n;)
*(s1++)=*(s2-1+m++);
*s1=0;
}
void main()
{
static char a[100],b[100];
int s,len;
void fun(char s1[],char s2[],int m,int n);
puts("ENTER A STRING:");
gets(a);
puts("ENTER STARTING POSITION AND LENGTH:");
scanf("%d,%d",&s,&len);
fun(b,a,s,len);
printf("THE SRBSTING IS:%s\n",b);
}
我感觉是for那儿错了 但找不出来
而且我发现我在C free和VC上运行结果不一样
cfree是自m个到结束都输出
VC是什么都没有 展开
#include<stdio.h>
#include<string.h>
char *f(char *s,int m,int n);
int main(void)
{
int m,n;
char s1[20];
printf("Please input m and n:");
scanf("%d%d",&m,&n);
printf("Please input a string:");
scanf("%s",s1);
printf("%s\n",f(s1,m,n));
return 0;
}
char *f(char *s,int m,int n)
{
int i,j=0;
char t[20];
for(i=m-1;i<=m+n-2;i++,j++)
t[j]=s[i];
t[j]='\0';
strcpy(s,t);
return (s);
}
我是问我的错哪里了,不是问其他答案
还有 你的这个会有问题的 当m大于字符长度的时候会有问题
void类型的函数是不返回函数,不能像你那样用。还有逻辑上的错误。我给你改了一下,我认为没有我第一种那样简单。只要加个do while 循环就能解决m或n大于字符串长度的问题了。
#include<stdio.h>
void fun(char s1[],char s2[],int m,int n)
{
int i,j=0;
for(i=m-1;i<m+n-1;i++,j++)
s2[j]=s1[i];
s2[j]='\0';
printf("THE SRBSTING IS:");
for(j=0;s2[j]!='\0';j++)
printf("%c",s2[j]);
printf("\n");
}
void main()
{
char a[100],b[100];
int s,len;
printf("ENTER A STRING:");
scanf("%s",a);
printf("ENTER STARTING POSITION AND LENGTH:");
scanf("%d%d",&s,&len);
fun(a,b,s,len);
}
#include<stdio.h>
void fun(char s1[],char s2[],int m,int n)
{
int len=0;
int count = 0;
while(s2[len]) len++;
for (;m<=len && (count < n);++count;) //加个变量统计计数就可以了,没必要那么繁琐
*(s1++)=*(s2-1+m++);
}
void main()
{
static char a[100],b[100];
int s,len;
void fun(char s1[],char s2[],int m,int n);
puts("ENTER A STRING:");
gets(a);
puts("ENTER STARTING POSITION AND LENGTH:");
scanf("%d,%d",&s,&len);//输入注意3,4如果没“,”那么n赋值失败
fun(b,a,s,len);
printf("THE SRBSTING IS:%s\n",b);
}
#include<stdio.h>
void fun(char s1[],char s2[],int m,int n)
{
int len=0;
int count = 0;
while(s2[len]) len++;
for (;m<=len && (count < n);++count) //加个变量统计计数就可以了,没必要那么繁琐
*(s1++)=*(s2-1+m++);
}
void main()
{
static char a[100],b[100];
int s,len;
void fun(char s1[],char s2[],int m,int n);
puts("ENTER A STRING:");
gets(a);
puts("ENTER STARTING POSITION AND LENGTH:");
scanf("%d,%d",&s,&len);//输入注意3,4如果没“,”那么n赋值失败
fun(b,a,s,len);
printf("THE SRBSTING IS:%s\n",b);
}
我都说了,你在scanf的时候,两个参数,中间有个“,”,所以,你输入的时候也要3,4,不然你第二个参数赋值的是,,这样就导致第二个值赋值失败。
你也可以这样scanf("%d%d",&s,&len);
for (s2+=(m-1);n>0 && *s2;n--)
*s1++ = *s2++;
int len=strlen(s2);
if (m<len){strncpy(s1,s2 m,n);}
}
→_→
if (m<len){strncpy(s1,s2+m,n);} sorry手机打不上+