gpt4 book ai didi

c - strstr() 函数获取位置

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:18 24 4
gpt4 key购买 nike

有两个文本,文本a是内容,文本b是逐行列出单词。该程序是获取文本b中单词在内容中的位置。

这是我的程序:

#include<stdio.h>
#include<string.h>

#define WORDMAXLENGTH 30
#define MAXLENGTH 200

int main(){
typedef struct{
char stack[MAXLENGTH][WORDMAXLENGTH];
int top;
}stack;

stack query;
query.top = 0;
int i = 0, j = 0,q = 0;
char myArr[MAXLENGTH];
char *PosStr = NULL;
FILE *inFile = fopen("query.txt","r");
FILE *inFile2 = fopen("hello.txt","r");

while(fgets(query.stack[query.top],WORDMAXLENGTH,inFile) != NULL){
query.top++;
}

fgets(myArr,MAXLENGTH,inFile2);

for(i = 0; i < query.top; i++){
PosStr = strstr(myArr,query.stack[i]);//get the position of s2 (Q1)
printf("%d\n", PosStr - myArr + 1);
}

fclose(inFile);
fclose(inFile2);
return 0;
}

Q1。这个等式对吗?如果错了,我怎样才能得到这个位置?如果是对的,为什么我不能正确得到位置?另外,PosStr的部分结果为0。

最佳答案

我假设该程序旨在检查第一个文件中的每个单词列表,以检查是否出现在第二个文件的单个文本行中,并且通过一些调整,它可以工作。

我添加了一些错误检查并从文件输入中删除了结尾的 newline。在打印基于 NULL 的值之前,我检查了 strstr() 的结果。我还添加了另一个 #define 来区分堆栈的大小和测试字符串的长度,并且,我检查堆栈没有溢出。

UPDATE 修改代码以检查整个单词 - 不区分大小写。

#include<stdio.h>
#include<string.h>

#define WORDMAXLENGTH 30
#define MAXENTRY 200
#define MAXLENGTH 200

typedef struct{
char stack[MAXENTRY][WORDMAXLENGTH];
int top;
} stack;

int main(){
FILE *inFile;
FILE *inFile2;
int i, w;
char myArr[MAXLENGTH];
char *sptr;
stack query;
query.top = 0;
inFile = fopen("query.txt","r");
inFile2 = fopen("hello.txt","r");
if (inFile == NULL || inFile2 == NULL) {
printf("Cannot open both files\n");
return 1;
}
while(fgets(query.stack[query.top], WORDMAXLENGTH, inFile) != NULL){
i = strcspn(query.stack[query.top], "\r\n");
query.stack[query.top][i] = 0; // remove trailing newline etc
if (++query.top >= MAXENTRY) // check stack full
break;
}

fgets(myArr,MAXLENGTH,inFile2);
//myArr [ strcspn(myArr, "\r\n") ] = 0; // remove trailing newline etc
w = 1; // word count
sptr = strtok(myArr, " \t\r\n"); // removes trailing stuff anyway
while (sptr) { // each word in test string
for(i=0; i<query.top; i++) { // each word in library list
if (stricmp(sptr, query.stack[i]) == 0) // without case
printf("%-4d %s\n", w, query.stack[i]);
}
w++;
sptr = strtok(NULL, " \t\r\n");
}

fclose(inFile);
fclose(inFile2);
return 0;
}

文件query.txt:

cat
dog
fox
rabbit

文件hello.txt:

A quick brown fox jumps over the lazy dog

程序输出:

4    fox
9 dog

关于c - strstr() 函数获取位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29123226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com