質問編集履歴

2

ソースコードの修正

2020/10/15 05:18

投稿

SUNMOON_14
SUNMOON_14

スコア20

test CHANGED
@@ -1 +1 @@
1
- 文章中の総単数などが得いです。
1
+ C言に関する質問でし
test CHANGED
@@ -2,30 +2,24 @@
2
2
 
3
3
 
4
4
 
5
- C言語:指定パス上のテキストファイルの文章の全単語数・標準入力で得た英単語の文章中での個数を、主に得たいです。
5
+ C言語
6
-
7
-
8
6
 
9
7
  ### 発生している問題・エラーメッセージ
10
8
 
11
9
 
12
10
 
13
- プログラム中で//testとしてみて実験はしているのですが、解決できません。
14
11
 
15
12
 
16
13
 
14
+
17
- 問題点1:改行が全部で1回の文章をfgetsで得た場合、総単語数が1多くなり、同じ文章で改行なしで試すと正しい単語数が得られます。つまり、「\n」の処理が上手くいっていないと考えております。
15
+ 問題点1
18
16
 
19
17
 
20
18
 
21
- 問題点2:単語数が0のままでstrcasecmp関数が機能していません。別のプログラムでこの関数が正しく動作する環境であることを確認しています。つまり、p_wordとp_keyが本当に一致していないのだと思います。
19
+ 問題点2
22
20
 
23
21
 
24
22
 
25
23
 
26
24
 
27
25
  ### 試したこと
28
-
29
-
30
-
31
- プログラム中で「//test」の行で実験はしているのですが、解決できません。

1

ソースコードの修正

2020/10/15 05:18

投稿

SUNMOON_14
SUNMOON_14

スコア20

test CHANGED
File without changes
test CHANGED
@@ -22,142 +22,6 @@
22
22
 
23
23
 
24
24
 
25
- # 該当のソースコード
26
-
27
-
28
-
29
- ```C
30
-
31
- #include <stdio.h>
32
-
33
- #include <ctype.h>
34
-
35
- #include <string.h>
36
-
37
- #define size 5000
38
-
39
-
40
-
41
- int main(){
42
-
43
- int cnt = 0; // 目的の単語数
44
-
45
- int all = 0; // 全単語数
46
-
47
- char word[32]={'\0'}; // 単語切り出し用
48
-
49
- char *p_word = word;
50
-
51
- int i = 0, j = 0; // カウンタ
52
-
53
-
54
-
55
- // 検索単語の入力
56
-
57
- char key[32]; // 検索ワード
58
-
59
- char *p_key = key;
60
-
61
- printf("Input a word for search and count: ");
62
-
63
- fgets(p_key, 32+1, stdin);
64
-
65
- printf("Input key = %s\n", p_key);
66
-
67
-
68
-
69
- // 単語の入力受付
70
-
71
- FILE *fp;
72
-
73
- char text[size]; // 文章格納配列
74
-
75
- char *buf = text;
76
-
77
- fp = fopen("test.txt","r"); // 任意入力でファイル指定できる
78
-
79
- if(fp == NULL){
80
-
81
- printf("cannot open\n");
82
-
83
- }else{
84
-
85
- printf("file open\n");
86
-
87
- }
88
-
89
- int k;//test
90
-
91
- while(fgets(buf, size+1, fp) != NULL){ //EOFかerrorになるまでstringを取得
92
-
93
- for(k=0;k<30;k++){
94
-
95
- printf("text[%d]=%c ",k,text[k]);//test
96
-
97
- }
98
-
99
- while(*(buf + i) != '\0'){
100
-
101
- /* 空白ではないとき */
102
-
103
- if(isalnum(*(buf + i)) != 0){
104
-
105
- *(p_word + j) = *(buf + i);
106
-
107
- i++;
108
-
109
- j++;
110
-
111
- }
112
-
113
- /* 空白のとき */
114
-
115
- else if(isalnum(*(buf + i)) == 0){
116
-
117
- *(p_word + j) = '\0';
118
-
119
- all = all + 1;
120
-
121
- printf("\np_word=%s ",p_word);//test
122
-
123
- printf("p_key = %s",p_key);
124
-
125
- if(strcasecmp(p_key, p_word) == 0){
126
-
127
- cnt++;
128
-
129
- }
130
-
131
- memset(p_word, '\0', 32);
132
-
133
- i++;
134
-
135
- j = 0;
136
-
137
- }
138
-
139
- }
140
-
141
- memset(buf, '\0', size); i = 0; j = 0;
142
-
143
- }
144
-
145
- fclose(fp);
146
-
147
- printf("file close\n");
148
-
149
-
150
-
151
- // 結果出力
152
-
153
- printf("全単語数:%d\n", all);
154
-
155
- printf("単語数:%d\n", cnt);
156
-
157
- }
158
-
159
- ```
160
-
161
25
 
162
26
 
163
27
  ### 試したこと