检查字符串中是否存在所有char值
发布时间:2020-12-16 06:51:40 所属栏目:百科 来源:网络整理
导读:我正在做这个任务,我被困住了.目标是读取文件并查找文件中String中是否存在这些char值.我必须将文件中的String与作为参数放入的另一个String进行比较.但是,只要每个char值都在文件的String中,那么它就“匹配”. 示例(输入和输出): ./a.out file1 done done
我正在做这个任务,我被困住了.目标是读取文件并查找文件中String中是否存在这些char值.我必须将文件中的String与作为参数放入的另一个String进行比较.但是,只要每个char值都在文件的String中,那么它就“匹配”.
示例(输入和输出):
示例(file1):
正如您所看到的那样,比较字符串无关紧要,文件每行也跟着一个单词.我把一个程序放在一起,查找char值是否存在于另一个String中,但这只是问题的一部分.知道如何去做吗? #define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc,char **argv){ FILE *f = fopen(argv[1],"r"); char *line = NULL; size_t len = 0; ssize_t read; char *word = argv[2]; if(argc != 3){ printf("./a.out <file> <word>n"); exit(EXIT_SUCCESS); } if(f == NULL){ printf("file emptyn"); exit(EXIT_SUCCESS); } // confused what this loop does too while((read = getline(&line,&len,f)) != -1){ char *c = line; while(*c){ if(strchr(word,*c)) printf("can't spell "%s" without "%s"!n",line,word); else printf("no "%s" in "%s".n",word,line); c++; } } fclose(f); exit(EXIT_SUCCESS); } 解决方法
另一种方法是简单地保持从文件读取的行中匹配的每个字符的总和,为提供给测试的单词中的每个唯一字符添加一个,并且如果总和等于由唯一字符组成的字符串的长度是搜索项,然后搜索项中的每个唯一字符都包含在从文件中读取的行中.
#include <stdio.h> #include <string.h> #define MAXC 256 int main (int argc,char **argv) { if (argc < 3 ) { /* validate required arguments */ fprintf (stderr,"error: insufficient input,usage: %s file stringn",argv[0]); return 1; } FILE *fp = fopen (argv[1],"r"); char line[MAXC] = ""; char *s = argv[2]; /* string holding search string */ size_t slen = strlen(s),sum = 0,ulen; char uniq[slen+1]; /* unique characters in s */ if (!fp) { /* validate file open */ fprintf (stderr,"error: file open failed '%s'.n",argv[1]); return 1; } memset (uniq,slen+1); /* zero the VLA */ /* fill uniq with unique characters from s */ for (; *s; s++) if (!strchr (uniq,*s)) uniq[sum++] = *s; ulen = strlen (uniq); s = argv[2]; /* reset s */ while (fgets (line,MAXC,fp)) { /* for each line in file */ if (strlen (line) - 1 < ulen) { /* short line,continue */ printf ("%s is not in %s",s,line); continue; } char *up = uniq; /* ptr to uniq */ sum = 0; /* reset sum */ while (*up) if (strchr (line,*up++)) sum++; /* count chars */ if (sum < ulen) /* validate sum */ printf ("%s is not in %s",line); else printf ("%s is in %s",line); } fclose (fp); /* close file */ return 0; } 示例使用/输出 $./bin/strallcinc dat/words.txt done done is in bonehead done is not in doggie 这对于搜索字符串中的重复字符同样有效.例如 $./bin/strallcinc dat/words.txt doneddd doneddd is in bonehead doneddd is not in doggie 您可以决定是否以不同方式处理重复字符,但是您应该确定如何解决该意外事件. 如果您有任何疑问,请告诉我. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |