質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

1439閲覧

ファイルに含まれる文の数を数える(c言語)

nanashi50

総合スコア8

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2017/11/25 15:07

2回目の投稿になります。前回、「英文が書かれたファイルを読み込んで,ファイルに含まれる文の数を数える」
(文の数を判定する文字は'.','?','!'の3つ)c言語のプログラムについて、2行以上のファイルの処理が上手くいかないということで質問させてもらいました。
今回は、!と?が複数並ぶことを想定して(!!や!?!?)文の数を数えるプログラムについて考えています。下にコードとテキスト2種類のせました。おそらくwhile(text[j+i]=='!'||text[j+1]=='?')以降の部分で間違えていることはわかるんですが、どう修正すればいいかわかりません。アドバイスしていただけるとありがたいです。

c言語 #include <stdio.h> #include <stdlib.h> #include<string.h> int main(void){ FILE *fp; char text_name[81], text[81]; int i=0,j=0, count=0; scanf("%s", text_name); fp=fopen(text_name, "r"); while(fgets(text, 81, fp)!=NULL){ while(text[i]!='\n'){ if(text[i]=='.'){ count++; } j=i; if(text[i]=='?'||text[i]=='!'){ while(text[j]=='!'||text[j]=='?'){ if(text[j]=='\0'){ count++; break; } j++; } count++; break; } /* if(text[i]=='.' || text[i]=='?' || text[i]=='!'){ count++; }*/ i++; } i=0; } printf("Number of sentences = %d\n", count); fclose(fp); return 0; }
sentences04.txt On the internet, people often use lots of extra punctuation marks. Here are some extracts from Twitter. Last night I was at like 860 followers and now I'm at 940???!!! Omg I'm freaking out. REALLY? REALLY?! The girls will perform on children in need on Friday and a morning show on Sunday. can they do a singing on Saturday in London????? New announcement tomorrow!!!! Show us some support??
sentences05.txt WOW!!!!!!!!!!!!!!!!!!!!!! Great!!!!!!!!!!!!!! My program works on all 5 examples???!!!?!?!?!?????? I can get a grade for this class!!! Yatta!!!! Yatta!!!! Yatta!!!!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

少しロジックを変更してみました。ご参考まで

c

1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4 5int main(void){ 6 FILE *fp; 7 char text_name[81], text[81]; 8 int i=0,j=0, count=0; 9 scanf("%s", text_name); 10 fp=fopen(text_name, "r"); 11 12 while(fgets(text, 81, fp)!=NULL){ 13 for (i=0;i<=strlen(text);i++){ 14 if(text[i]=='.' || text[i]=='?' || text[i]=='!'){ 15 count++; 16 if (text[i]=='?' || text[i]=='!'){ 17  while(i<=strlen(text) && (text[i]=='?' || text[i]=='!')){ 18 i++; 19 } 20 } 21 } 22 } 23 } 24 printf("Number of sentences = %d\n", count); 25 fclose(fp); 26 return 0; 27}

投稿2017/11/25 15:47

編集2017/11/25 15:51
A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nanashi50

2017/11/26 02:37

参考にさせてもらいます。回答ありがとうございましたm(_ _)m
guest

0

while(text[j]=='!'||text[j]=='?')を抜けた後にjをiに戻し忘れてますね

そもそも、新しい変数jを作らずにiのままで増やしてもいいんじゃないかな

投稿2017/11/25 15:40

編集2017/11/25 15:42
asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nanashi50

2017/11/26 02:38

参考にさせてもらい、修正したあと、上手くいくようになりました。 回答ありがとうございましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問