#include<string.h> #include<stdio.h> //如果t是s的子串,返回在s中起始下标,不是子串返回-1int fun(char *s,char *t) //********beqin***********// //xxxxxxxend***xX*******// int nain(void) 《 char str1[30] ,str2[10]; gets(str1); gets(str2); printf(“%d”,fun(str1,str2)); 6; return
时间: 2023-07-19 13:08:45 浏览: 148
代码存在一些问题:
1. 函数名应该是 main 而不是 nain。
2. 函数 fun 中缺少函数体,应该在 beqin 和 end 之间添加函数体。
3. printf 语句中缺少结束的分号。
4. 函数 fun 的返回值应该是 int 类型而不是 void 类型。
5. gets 函数存在安全问题,应该使用 fgets 替代。
以下是修改后的代码:
```
#include <stdio.h>
#include <string.h>
int fun(char *s, char *t) {
// 在这里添加函数体
return -1; // 如果不是子串返回-1
}
int main() {
char str1[30], str2[10];
fgets(str1, 30, stdin);
fgets(str2, 10, stdin);
printf("%d", fun(str1, str2));
return 0;
}
```
相关问题
//查找子串 //查找子串 #include<string.h> #include<stdio.h> //如果t是s的子串,返回在s中起始下标,不是子串返回-1 int fun(char *s,char *t) { //********begin***********// //*******end************// } int main(void) { char str1[30],str2[10]; gets(str1); gets(str2); printf("%d", fun(str1,str2)); return 0; }补全该程序
可以使用C语言的字符串库函数strstr()来判断一个字符串是否是另一个字符串的子串。如果是,则返回在主串中的起始下标;如果不是,则返回NULL。
下面是完整的程序实现:
```
#include <stdio.h>
#include <string.h>
//如果t是s的子串,返回在s中起始下标,不是子串返回-1
int fun(char *s, char *t) {
char *p = strstr(s, t);
if (p) {
return p - s;
} else {
return -1;
}
}
int main(void) {
char str1[30], str2[10];
gets(str1);
gets(str2);
printf("%d", fun(str1, str2));
return 0;
}
```
函数fun()接受两个指向字符数组的指针,分别表示主串和子串。它首先调用strstr()函数判断子串是否是主串的子串,如果是,则计算出子串在主串中的起始下标并返回;如果不是,则返回-1。
在main()函数中,通过gets()函数分别读入主串和子串,并调用fun()函数进行判断。最后将结果输出。
#include <stdio.h> #include <string.h> #define size 20 int BF(char S[], char T[]); char* delet(char S[], char T[], int n); int main() { int i; int j; char a[]; char S[] = "10 20 30"; char T[] = "40"; printf("新换进去的数字是"); scanf("%s", &a[]); int start = BF(S, T); if (start != 0) {printf("子串在主串中的起始位置是:%d\n", start); printf("替换子串后的结果是:%s\n", insert(S, T, start)); } else {printf("子串不在主串中\n"); } return 0;} int BF(char S[], char T[]) { int start = 0; int i = 0, j = 0; while ((S[i] != '\0') && (T[j] != '\0')) { if (S[i] == T[j]) { i++; j++; } else { start++; i = start; j = 0; } } if (T[j] == '\0') { return start; } else { return 0; }} char* delet(char S[], char T[], int n) { int lena, lenb, i, j; lena = strlen(S);//主串长度 lenb = strlen(T);//子串长度 for (i = n; i < lena - lenb; i++) { S[i] = S[i + lenb]; } S[i + lenb] = '\0'; return S;} char* insert(char S[], char T[], int n,char a[]) { int lena, lenb, i, j; int x = 0; lena = strlen(S);//主串长度 lenb = strlen(a);//新串长度 for (i = n;i < lena - lenb;i++;x++) { S[i + lenb]=S[i]; S[i] = a[0]; } return S; }这串代码有哪些错误
这段代码有很多错误,下面列举一些:
1. 在定义字符数组 a[] 时应该指定数组大小,例如 char a[size];
2. 在读取用户输入的新数字时,应该使用 scanf("%s", a) 而不是 scanf("%s", &a[]);
3. 函数 insert() 的参数列表中缺少了一个参数,应该加上 char a[],表示要插入的新数字;
4. insert() 函数中的 for 循环语句中,应该是 i++ 而不是 i++;
5. 函数 insert() 中的变量 x 没有用到,应该删除;
6. 在 main() 函数中,调用 insert() 函数时应该传入 a[] 数组作为参数,表示要插入的新数字;
7. 在调用 scanf() 函数时,应该使用 &a[0] 而不是 &a[];
8. 在调用 insert() 函数时,第三个参数应该传入 start - 1,因为字符串下标从 0 开始,而 BF() 函数返回的是子串在主串中的起始位置,所以要减去 1。
除此之外,还有其他可能的错误,需要仔细检查代码。
阅读全文