teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

ソースコードの修正

2020/10/15 05:18

投稿

SUNMOON_14
SUNMOON_14

スコア20

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

1

ソースコードの修正

2020/10/15 05:18

投稿

SUNMOON_14
SUNMOON_14

スコア20

title CHANGED
File without changes
body CHANGED
@@ -10,75 +10,7 @@
10
10
 
11
11
  問題点2:単語数が0のままでstrcasecmp関数が機能していません。別のプログラムでこの関数が正しく動作する環境であることを確認しています。つまり、p_wordとp_keyが本当に一致していないのだと思います。
12
12
 
13
- # 該当のソースコード
14
13
 
15
- ```C
16
- #include <stdio.h>
17
- #include <ctype.h>
18
- #include <string.h>
19
- #define size 5000
20
-
21
- int main(){
22
- int cnt = 0; // 目的の単語数
23
- int all = 0; // 全単語数
24
- char word[32]={'\0'}; // 単語切り出し用
25
- char *p_word = word;
26
- int i = 0, j = 0; // カウンタ
27
-
28
- // 検索単語の入力
29
- char key[32]; // 検索ワード
30
- char *p_key = key;
31
- printf("Input a word for search and count: ");
32
- fgets(p_key, 32+1, stdin);
33
- printf("Input key = %s\n", p_key);
34
-
35
- // 単語の入力受付
36
- FILE *fp;
37
- char text[size]; // 文章格納配列
38
- char *buf = text;
39
- fp = fopen("test.txt","r"); // 任意入力でファイル指定できる
40
- if(fp == NULL){
41
- printf("cannot open\n");
42
- }else{
43
- printf("file open\n");
44
- }
45
- int k;//test
46
- while(fgets(buf, size+1, fp) != NULL){ //EOFかerrorになるまでstringを取得
47
- for(k=0;k<30;k++){
48
- printf("text[%d]=%c ",k,text[k]);//test
49
- }
50
- while(*(buf + i) != '\0'){
51
- /* 空白ではないとき */
52
- if(isalnum(*(buf + i)) != 0){
53
- *(p_word + j) = *(buf + i);
54
- i++;
55
- j++;
56
- }
57
- /* 空白のとき */
58
- else if(isalnum(*(buf + i)) == 0){
59
- *(p_word + j) = '\0';
60
- all = all + 1;
61
- printf("\np_word=%s ",p_word);//test
62
- printf("p_key = %s",p_key);
63
- if(strcasecmp(p_key, p_word) == 0){
64
- cnt++;
65
- }
66
- memset(p_word, '\0', 32);
67
- i++;
68
- j = 0;
69
- }
70
- }
71
- memset(buf, '\0', size); i = 0; j = 0;
72
- }
73
- fclose(fp);
74
- printf("file close\n");
75
-
76
- // 結果出力
77
- printf("全単語数:%d\n", all);
78
- printf("単語数:%d\n", cnt);
79
- }
80
- ```
81
-
82
14
  ### 試したこと
83
15
 
84
16
  プログラム中で「//test」の行で実験はしているのですが、解決できません。