我想分析文本文件中的单词(每个单词的长度,起始字符等)。为此,第一步是从文件中读取每个单词,然后继续存储在数组中。
在下面的代码中,我设法将所有字符存储在一个数组中,但没有分成单词。
#include <stdio.h>
#include <stdlib.h>
FILE *inp;
char arr[100];
int i = 0;
int word_count = 0;
char c;
int char_count = 0;
inp = fopen("string_in.txt", "r");
while ((c = fgetc(inp)) != EOF) {
if (c == ' ' || c == '\n') {
printf("\n");
arr[char_count] = c;
word_count++;
}
else {
//printf("%c", c); //print to check if file is being read correctly
arr[char_count] = c;
printf("%c",arr[char_count]);
}
char_count++;
}
printf("\n");
printf("Chars: %d, Words: %d\n", char_count, word_count+1);
printf("From array: \n");
for(i = 0; i <= word_count; i++) {
printf("%c",arr[word_count]);
}
printf("\n");
fclose(inp);
return (EXIT_SUCCESS);
输入文字:
This is a test
输出:
This
is
a
test
Chars: 15, Words: 4
From array:
This is a test
我想访问以下元素:
arr[0] = 'This'
arr[3] = 'Test'
但是由于我是按字符而不是单词来输入字符串
arr[0] = 'T'
arr[3] = 's'
关于如何扩展以存储完整单词的任何建议?
编辑:
按照以下答案:
while ((c = fgetc(inp)) != EOF) {
if (c == ' ' || c == '\n') {
printf("\n");
arr[word_count][char_count] = '\0'; //Terminate the string
char_count = 0; //Reset the counter.
word_count++;
}
else {
arr[word_count][char_count] = c;
printf("%c",arr[word_count][char_count]);
}
(char_count < 99)? (char_count++):(char_count = 0);
}
printf("From array: \n");
for(i = 0; i < word_count; i++) {
printf("%s",arr[word_count]);
}
不打印数组的输出。
This
is
a
test
Chars: 5, Words: 4
From array:
Press [Enter] to close the terminal ...
答案 0 :(得分:2)
当前,您有空间存储单个Broadcast Receiver
。
string
然后您的读数会发生以下变化。
char arr[100]; -->char arr[100][100];
您的打印更改如下。
while ((c = fgetc(inp)) != EOF) {
if (c == ' ' || c == '\n') {
printf("\n");
arr[word_count][char_count] = '\0'; //Terminate the string
char_count = 0; //Reset the counter.
word_count++;
}
else {
arr[word_count][char_count] = c;
printf("%c",arr[word_count][char_count]);
if (char_count < 99)
char_count++;
else
char_count = 0;
}
}
答案 1 :(得分:1)
正如其他用户所说,您必须使用2D阵列。它们是通过以下方式声明和初始化的:arr[10][100]
(10为要存储的单词数,请根据需要进行更改)。
while ((c = fgetc(inp)) != EOF) {
if (c == ' ' || c == '\n') {
printf("\n");
arr[word_count][char_count]='\0';
char_count=0;
word_count++;
}
else {
arr[word_count][char_count] = c;
printf("%c",arr[word_count][char_count]);
char_count++;
}
if(char_count>=100) // security in case a word is too long
char_count=0;
}
word_count++;
printf("\n");
printf("Chars: %d, Words: %d\n", char_count, word_count);
printf("From array: \n");
for(i = 0; i < word_count; i++) {
printf("%s ",arr[i]);
}
请记住,由于每次有新单词我都会重置char_count
,因此循环后的值将不是您期望的值(仅是最后一个单词的长度)和值在printf中显示将是错误的。如果您确实关心它,则必须创建另一个变量。
答案 2 :(得分:0)
您可以使用Char **来完全存储单词
array [100] [100]
由于在array [100]中存储了一个字符串,因此在访问array [0]时仅访问该字符串的第一个字母。
您需要修改代码并实现双精度数组而不是单个数组