C 如何检查文件中是否有字符串

C 如何检查文件中是否有字符串,c,arrays,string,strcmp,C,Arrays,String,Strcmp,我是C语言的新手,我正在尝试找出如何在一个包含多个数字和单词的文件中搜索特定字符串及其后面的数字 我正在使用的输入文件如下所示: TREES 2 BENCHES 5 ROCKS 10 PLANTS 8 #include <stdio.h> // For file-handling methods #include <string.h> // For strstr method int main(void){ FILE *fp; char *searchStr

我是C语言的新手,我正在尝试找出如何在一个包含多个数字和单词的文件中搜索特定字符串及其后面的数字

我正在使用的输入文件如下所示:

TREES 2
BENCHES 5
ROCKS 10
PLANTS 8
#include <stdio.h>  // For file-handling methods
#include <string.h> // For strstr method

int main(void){
  FILE *fp;
  char *searchString="ROCKS";
  fp = fopen("myfile.txt", "r");
  char buf[100]; // Either char* buf or char buf[<your_buffer_size>]
  int myNumber = -1;
  while((fgets(buf, 100, fp)!=NULL) {
    if(strstr(buf, searchString)!=NULL) {
      sscanf(buf + strlen(searchString), "%d", &myNumber);
      break;
    }
  }
  printf("After the loop, myNumber is %d\n", myNumber);
  fclose(fp);
  return (0);
}
我知道如何让函数读取字符串,我知道如何比较两个字符串,但我不知道如何将它们放在一起,或者如何设置数组以读取整个文件


我一直在使用strcmp,但我不知道如何初始化要查找的单词。

创建一个包含要搜索的单词的数组。创建一个外部循环,在文件数据流中一次前进一个字符偏移量。创建第二个内部循环,循环搜索要搜索的术语数组。内部循环根据外部循环提供的数据检查数组中的每个项。使用strncmp将每个比较的长度限制为所搜索单词的长度。匹配后,检查源缓冲区中的以下字符,以确保它不会否定匹配

创建一个包含要搜索的单词的数组。创建一个外部循环,在文件数据流中一次前进一个字符偏移量。创建第二个内部循环,循环搜索要搜索的术语数组。内部循环根据外部循环提供的数据检查数组中的每个项。使用strncmp将每个比较的长度限制为所搜索单词的长度。匹配后,检查源缓冲区中的以下字符,以确保它不会否定匹配

创建一个包含要搜索的单词的数组。创建一个外部循环,在文件数据流中一次前进一个字符偏移量。创建第二个内部循环,循环搜索要搜索的术语数组。内部循环根据外部循环提供的数据检查数组中的每个项。使用strncmp将每个比较的长度限制为所搜索单词的长度。匹配后,检查源缓冲区中的以下字符,以确保它不会否定匹配

创建一个包含要搜索的单词的数组。创建一个外部循环,在文件数据流中一次前进一个字符偏移量。创建第二个内部循环,循环搜索要搜索的术语数组。内部循环根据外部循环提供的数据检查数组中的每个项。使用strncmp将每个比较的长度限制为所搜索单词的长度。匹配后,检查源缓冲区中的以下字符,以确保它不会否定匹配

您可以这样做:

TREES 2
BENCHES 5
ROCKS 10
PLANTS 8
#include <stdio.h>  // For file-handling methods
#include <string.h> // For strstr method

int main(void){
  FILE *fp;
  char *searchString="ROCKS";
  fp = fopen("myfile.txt", "r");
  char buf[100]; // Either char* buf or char buf[<your_buffer_size>]
  int myNumber = -1;
  while((fgets(buf, 100, fp)!=NULL) {
    if(strstr(buf, searchString)!=NULL) {
      sscanf(buf + strlen(searchString), "%d", &myNumber);
      break;
    }
  }
  printf("After the loop, myNumber is %d\n", myNumber);
  fclose(fp);
  return (0);
}
#包含//用于文件处理方法
#包含//用于strstr方法
内部主(空){
文件*fp;
char*searchString=“ROCKS”;
fp=fopen(“myfile.txt”、“r”);
char buf[100];//char*buf或char buf[]
int myNumber=-1;
while((fgets(buf,100,fp)!=NULL){
if(strstr(buf,searchString)!=NULL){
sscanf(buf+strlen(searchString),%d“,&myNumber);
打破
}
}
printf(“在循环之后,myNumber是%d\n”,myNumber);
fclose(fp);
返回(0);
}

免责声明-未经测试。应关闭…

您可以执行以下操作:

TREES 2
BENCHES 5
ROCKS 10
PLANTS 8
#include <stdio.h>  // For file-handling methods
#include <string.h> // For strstr method

int main(void){
  FILE *fp;
  char *searchString="ROCKS";
  fp = fopen("myfile.txt", "r");
  char buf[100]; // Either char* buf or char buf[<your_buffer_size>]
  int myNumber = -1;
  while((fgets(buf, 100, fp)!=NULL) {
    if(strstr(buf, searchString)!=NULL) {
      sscanf(buf + strlen(searchString), "%d", &myNumber);
      break;
    }
  }
  printf("After the loop, myNumber is %d\n", myNumber);
  fclose(fp);
  return (0);
}
#包含//用于文件处理方法
#包含//用于strstr方法
内部主(空){
文件*fp;
char*searchString=“ROCKS”;
fp=fopen(“myfile.txt”、“r”);
char buf[100];//char*buf或char buf[]
int myNumber=-1;
while((fgets(buf,100,fp)!=NULL){
if(strstr(buf,searchString)!=NULL){
sscanf(buf+strlen(searchString),%d“,&myNumber);
打破
}
}
printf(“在循环之后,myNumber是%d\n”,myNumber);
fclose(fp);
返回(0);
}

免责声明-未经测试。应关闭…

您可以执行以下操作:

TREES 2
BENCHES 5
ROCKS 10
PLANTS 8
#include <stdio.h>  // For file-handling methods
#include <string.h> // For strstr method

int main(void){
  FILE *fp;
  char *searchString="ROCKS";
  fp = fopen("myfile.txt", "r");
  char buf[100]; // Either char* buf or char buf[<your_buffer_size>]
  int myNumber = -1;
  while((fgets(buf, 100, fp)!=NULL) {
    if(strstr(buf, searchString)!=NULL) {
      sscanf(buf + strlen(searchString), "%d", &myNumber);
      break;
    }
  }
  printf("After the loop, myNumber is %d\n", myNumber);
  fclose(fp);
  return (0);
}
#包含//用于文件处理方法
#包含//用于strstr方法
内部主(空){
文件*fp;
char*searchString=“ROCKS”;
fp=fopen(“myfile.txt”、“r”);
char buf[100];//char*buf或char buf[]
int myNumber=-1;
while((fgets(buf,100,fp)!=NULL){
if(strstr(buf,searchString)!=NULL){
sscanf(buf+strlen(searchString),%d“,&myNumber);
打破
}
}
printf(“在循环之后,myNumber是%d\n”,myNumber);
fclose(fp);
返回(0);
}

免责声明-未经测试。应关闭…

您可以执行以下操作:

TREES 2
BENCHES 5
ROCKS 10
PLANTS 8
#include <stdio.h>  // For file-handling methods
#include <string.h> // For strstr method

int main(void){
  FILE *fp;
  char *searchString="ROCKS";
  fp = fopen("myfile.txt", "r");
  char buf[100]; // Either char* buf or char buf[<your_buffer_size>]
  int myNumber = -1;
  while((fgets(buf, 100, fp)!=NULL) {
    if(strstr(buf, searchString)!=NULL) {
      sscanf(buf + strlen(searchString), "%d", &myNumber);
      break;
    }
  }
  printf("After the loop, myNumber is %d\n", myNumber);
  fclose(fp);
  return (0);
}
#包含//用于文件处理方法
#包含//用于strstr方法
内部主(空){
文件*fp;
char*searchString=“ROCKS”;
fp=fopen(“myfile.txt”、“r”);
char buf[100];//char*buf或char buf[]
int myNumber=-1;
while((fgets(buf,100,fp)!=NULL){
if(strstr(buf,searchString)!=NULL){
sscanf(buf+strlen(searchString),%d“,&myNumber);
打破
}
}
printf(“在循环之后,myNumber是%d\n”,myNumber);
fclose(fp);
返回(0);
}

免责声明-未经测试。应该很接近…

告诉我们您到底在找什么,是石头还是10块,或者两者都有。无论如何,我认为strstr()在这种情况下是您的朋友。您也可以将数字作为字符串读取,然后使用
strcmp
进行比较。或者
strncmp
…我想他们正在询问如何从文件中读取字符串。使用
fgets
的循环将是最佳选择。不清楚您是否要与令牌数组(要查找的单词)进行比较或者,正如你明确地说的,只有一个。相关:。告诉我们你到底在找什么会有很大的帮助,岩石或者10块,或者两者都有。无论如何,我认为strstr()在这种情况下是您的朋友。您也可以将数字作为字符串读取,然后使用
strcmp
进行比较。或者
strncmp
…我想他们正在询问如何从文件中读取字符串。使用
fgets
的循环将是最佳选择。不清楚您是否要将其与令牌数组(单词)进行比较