我必须在一个文件中获取字符串的第一个单词,并将其与一些单词进行比较,如果它们与单词相同,我将其与它进行比较,计数器将递增,然后在末尾显示每个单词的数量。我总是以正确的数量获取前两个单词,其他单词为0
,或所有0
。
试着这样做:
#include <stdio.h>
#include <string.h>
int main() {
FILE *fpl = fopen("your_file.txt", "r");
if (fpl != NULL) {
printf("File opened\n");
char vetor[500];
char firstword[11];
int alamedas = 0;
while (fgets(vetor, 500, fpl)) {
for (int i = 0; i < 100; i++) {
if (vetor[i] == 'A' && vetor[i + 6] == 'a') {
int n = 0;
while (n < 7) {
firstword[n] = vetor[i];
i++;
n++;
}
firstword[n] = '\0';
if (strcmp("Alameda", firstword) == 0) {
alamedas += 1;
}
}
}
}
fclose(fpl);
printf("Alamedas - %d\n", alamedas);
} else {
printf("Can't open file\n");
}
return 0;
}
字符串
然后如果我添加另一个if
,就像第一个for
之后的第一个if
,它不会添加到自己的计数中,不知道为什么。
3条答案
按热度按时间x759pob21#
关于你的代码的一些评论:
fgets()
函数从文件中获取数据到vetor[]
,如果文件中每个字符串有1个单词是合理的,但它看起来还是有点乱。更干净的解决方案是使用fscanf(fpl, "%s", vetor)
-这样它会扫描1个单词,用空格/换行符/制表符与其他单词分隔开....下次你使用这个函数时,它会读取下一个单词,如果没有单词,它将返回0,while-loop将停止。字符串
型
你可以简单地通过“反转”它来使它更具可读性:
型
我希望我得到了正确的问题,你的第一个解决方案是有点直截了当,我会建议阅读标准string.h函数,如
strcpy()
(顺便说一句。你已经在你的代码中写了一个自己的:)。此外,你有太多的{{},这导致非常复杂的代码不可持续的代码。尝试将你的代码划分为函数,你会读起来容易得多。解决方案应该总是漂亮和漂亮的小!祝你好运
ejk8hzay2#
几件事:
假设,如果输入文件中的一行有超过
500
个字符,在这种情况下,您将得到不正确的输出,因为在下一次迭代中,fgets()
将读取它在上一次调用中读取的同一行的其余部分。for (int i = 0; i < 100; i++)
个这个
for
循环没有任何意义。在从文件中阅读一行/字符串之后,这个循环将在vetor
缓冲区中搜索所有出现的子字符串(直到第一个100
字符),该子字符串具有当前处理的字母A
,从中,第七个字母是a
,然后将这些字符复制到另一个缓冲区中,并与字符串"Alameda"
进行比较。如果您的目标是将文件每行的第一个单词与一个单词进行比较,然后从
fgets()
读取数据的缓冲区中提取第一个单词,为了提取第一个单词,忽略缓冲区开头的任何空白字符,一旦找到字母表,读到你找到一个空白字符为止。把这些字母复制到一个缓冲区中,然后和你想要计数的单词进行比较。你也可以使用fscanf()
作为替代读取字符串的第一个字,前提是你知道传递fscanf()
的正确格式说明符。要读取文件并将文件每行的第一个单词与一个单词进行比较并打印该单词的计数,您可以执行以下操作:
字符串
除了
fscanf()
说明符字符串-"%99s%*[^\n]"
之外,程序相当简单。在此格式说明符中,%99s
将忽略初始空白字符(如果有的话),然后读取buffer中的第一个字(数字99
表示如果word大于99
个字符,则最多读取99
个字符,这是为了防止缓冲区溢出),%*[^\n]
将忽略该行的其余部分,直到一个换行符。如果你想搜索多个单词的出现,作为文件行中的第一个单词,那么最好创建一个包含字符串和
int
成员的结构:型
创建一个
struct wc
的数组,并使用字符串初始化它的st
成员,并使用0
初始化对应的cnd
:型
提取第一个单词后,在一个循环中将该单词与数组
arr
中的所有单词进行比较,如果它与任何单词匹配,则增加其相应的计数。完成阅读文件后,打印数组arr
的成员。如果你还有什么问题,请告诉我。
vom3gejh3#
使用strcmp函数
https://www.programiz.com/c-programming/library-function/string.h/strcmp
C strcmp()strcmp()逐字符比较两个字符串。如果字符串相等,则函数返回0。