#include<stdio.h> #include<stdlib.h> #include<string.h> #define MAXSIZE 100 typedef char datatype; typedef struct l{ datatype str[MAXSIZE]; int length; }seqstring; int index(seqstring S,seqstring T) { int i,j,succ; i=0; succ=0; while(i<=S.length-T.length&&!succ) { j=0; succ=1; while(j<=T.length&&succ) { if(T.str[j]==S.str[i+j]) { ++j; } else { succ=0; } i++; } } if(succ) { return(i); } else { return -1; } } int main() { seqstring S,T; int i,max; max=20; S.str={a,b,c,d,s,d,f}; S.length=strlen(&S); printf("字符串S的字符个数为:%d\n",S.length); T.str={c,d}; scanf("%s",&T); T.length=strlen(&T); printf("字符串S的字符个数为:%d",T.length); index(S,T); return 0; }
时间: 2023-12-01 18:03:50 浏览: 85
这个程序中有一些问题。
首先,在定义字符串S和T时,你不能直接使用大括号初始化字符串,而应该使用双引号或单引号。例如:
```
S.str = "abcdsdf";
```
其次,在计算S和T的长度时,你应该使用strlen函数,而不是使用&运算符。例如:
```
S.length = strlen(S.str);
```
最后,在调用index函数时,你应该将其返回值保存在一个变量中,然后输出这个变量的值。例如:
```
int pos = index(S, T);
printf("T在S中的位置为:%d\n", pos);
```
这样才能正确输出函数的结果。
相关问题
如何运行#include<stdlib.h> #include<stdio.h> #define maxSize 100 //顺序表存储的最大容量 typedef int DataType;//每个元素的数据类型 typedef struct{ DataType data[maxSize];//线性表的存储数组 int n;//数组中当前已有表的元素数 }SeqList;//创建一个新表
要运行这段代码,你需要进行以下步骤:
1. 打开一个文本编辑器,比如Notepad++或者Visual Studio Code。
2. 将上述代码粘贴到文本编辑器中。
3. 将文件保存为一个以`.c`为扩展名的文件,比如`main.c`。
4. 打开命令提示符或终端窗口。
5. 使用`cd`命令导航到保存了代码文件的目录。
6. 输入以下命令来编译代码并生成可执行文件:
```
gcc main.c -o main
```
这将使用GCC编译器编译`main.c`文件,并生成一个名为`main`的可执行文件。
7. 输入以下命令来运行可执行文件:
```
./main
```
这将执行生成的可执行文件,并在命令提示符或终端窗口中显示输出结果。
请注意,你需要确保已经安装了GCC编译器,并且将其添加到系统的环境变量中,以便可以在命令提示符或终端窗口中直接使用。如果你没有安装GCC编译器,你可以通过安装MinGW来获取它。
#include <stdio.h> #include <stdlib.h> #define MaxSize 10 int visited[MaxSize]={0}; typedef char DataType; typedef struct { DataType vertex[MaxSize]; int edge[MaxSize][MaxSize]; int vertexNum, edgeNum; } MGraph; void func1(MGraph *G, DataType a[ ], int n, int e) { int i, j, k; G->vertexNum = n; G->edgeNum = e; for (i = 0; i < G->vertexNum; i++) G->vertex[i] = a[i]; for (i = 0; i < G->vertexNum; i++) for (j = 0; j < G->vertexNum; j++) G->edge\[i\]\[j\] = 0; for (k = 0; k < G->edgeNum; k++) { printf("输入边依附的顶点编号:"); scanf("%d%d", &i, &j); G->edge[i][j] = 1; G->edge[j][i] = 1; } } void func2(MGraph *G, int v) { int j; printf("%c ", G->vertex[v]); visited[v] = 1; for (j = 0; j < G->vertexNum; j++) if (G->edge[v][j] == 1 && visited[j] == 0) func2(G, j); } 1、解释结构体struct的内容和含义(4分) 2、解释func1的函数的作用,包含整个函数的输入输出函数,代码段的作用(8分) 解释func2的函数的作用,包含整个函数的输入输出函数,代码段的作用(8分)
1、结构体struct定义了一个名为MGraph的结构体类型,其中包含了一个顶点数组vertex,一个边数组edge,一个顶点数vertexNum和一条边数edgeNum。这个结构体用来描述一个图的基本信息。
2、函数func1的作用是根据输入的顶点信息和边信息构建一个图,并将其存储在MGraph结构体中。其中,函数的输入参数包括一个指向MGraph结构体的指针G,一个字符类型的顶点数组a,一个整型变量n表示顶点数,一个整型变量e表示边数。函数的输出参数为构建好的图信息存储在MGraph结构体中。
函数的代码段首先将输入的顶点信息存储在MGraph结构体中,然后将边数组中的所有元素初始化为0。接着,循环读入边信息,并将对应的边在边数组中标记为1,表示两个顶点之间有边。
函数func2的作用是进行深度优先遍历,并输出遍历结果。其中,函数的输入参数包括一个指向MGraph结构体的指针G,一个整型变量v表示遍历起始点。函数的输出参数为遍历结果。
函数的代码段首先输出遍历起始点的顶点信息,并将其标记为已访问过。然后循环遍历起始点的所有相邻顶点,并递归调用函数func2来遍历这些相邻顶点。在遍历相邻顶点之前,需要先判断该顶点是否已经被访问过,以避免重复访问。
阅读全文