C为什么 我这段代码老是不对!!

来源:百度知道 编辑:UC知道 时间:2024/06/20 21:48:41
题目要求:Input

第一行有一个字符串,为被操作字符串的初值(可能为空串),
接下来有一个整数q,表示操作的个数,接下来q行每行为下列情况的一种:
1. strcat ssss 表示把字符串ssss连接到被操作的字符串之后;
2. strsub b e 表示求被操作字符串的子串(Sb...Sb+e-1);
3. strequ ssss 判断被操作字符串与ssss是否相等

(每次strcat操作之后,被操作的字符串被永久的改变。)
被操作字符串最长长度不超过1024

Output

对于情况1,输出一行,为连接ssss之后的被操作字符串。(数据保证不会操作fail)
对于情况2,输出一行,输出子串,如失败输出"fail"(不包含引号)
对于情况3,输出一行,如果相等,输出"yes",否则输出"no";

我的代码:
#include<stdio.h>

#define MAXN 1030

char s1[MAXN],s2[MAXN];

int strlen(char s[])
{
int i;
for(i=0;s[i]!='\0';i++) return (i);
}

void strsub(char s1[],int i,int j,char s2[])
{
int m,k;
if(i<0||i>=(m=strlen(s1))||j<0||i+j>m)
{
printf("fail\n");
return ;
}
for(k=0;k<j;k++) s2[k]=s1[i+k];
s2[k]=0;
printf("%s\n",s2);
}

我没有运行

但看到了一个逻辑错误

int strlen(char s[])
{
int i;
for(i=0;s[i]!='\0';i++) return (i);
}

这里应该为

int strlen(char s[])
{
int i;
for(i=0;s[i]!='\0';i++);
return (i);
}

其它的似乎没大问题

干嘛自己把这些函数都写一便

strcat strncpy strcmp这些库函数就够了

来自:求助得到的回答