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

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

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

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

Q&A

解決済

3回答

767閲覧

c言語 .txtファイルの文字列フィルタリング

memudon

総合スコア6

C

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

0グッド

0クリップ

投稿2021/06/20 08:29

前提・実現したいこと

C言語で、txtファイルの内容を次のようにフィルタリングして別のファイルに書き込むようなプログラムを作りたいです。

1.大文字を全て小文字に変換する。
2.2つ以上のスペースを一つのスペースに統一する。
3.アルファベット、数字以外の文字を全て削除する。

txtファイルはアルファベットと記号のみで構成されており、文字数は4000程です。
c言語を学びはじめたばかりで、もはや何から手を付けたらいいのかわからなくなっております。
構造体以外の基本的な内容は学び終えた状態です。
よろしくお願い致します。

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

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

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

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

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

episteme

2021/06/20 08:37

しつもんはなんですか?
memudon

2021/06/20 08:39

情報不足で申し訳ございません。 どのように関数を作っていけばいいのか分かりません。 よろしくお願い致します。
thkana

2021/06/20 08:51

アルファベットと数字以外全て削除するのなら、スペースを圧縮なんてしなくても削ってしまえばよいのではないですか? 言い換えれば、2.の過程は無意味ですね?
dodox86

2021/06/20 09:24

最初に質問を読んだ時、thkanaさんと同じ疑問を抱きましたが、たぶん、1,2,3はそれぞれ別の課題(問題)なのではないでしょうか。文の書き方が誤解を招いていると思います。>質問者さん
otn

2021/06/20 09:36

> 何から手を付けたらいいのかわからなくなっております。 と言うことであれば、 > 構造体以外の基本的な内容は学び終えた状態です。 というのが認識違いです。全然学び終えてません。復習から始めるのが良いと思います。
guest

回答3

0

ベストアンサー

C言語の基礎はやり終えたとのことで、ここから先は望む仕様をどう実現するかのロジックを考える能力を鍛えることになりますね。
この辺はあまり入門書とかは取り扱わないところなのと経験値と感性に大きく左右される部分になるので結構ぶつかるところだと思います。

今回は構造体使わなくても解けるものなので、現在ある知識だけであとは手順をブレイクダウンしていけば解けますね。
1は単純にforとifと配列への代入でできます。大文字と小文字の変換は探せばいくらでも出てくるので調べてください。
2はいろいろやり方はあると思いますが、別配列を用意して、ファイルの内容を順に見ていって条件に満たない文字を別配列に入れていくのが楽ですかね。具体的な手法は伏せますが、例えば自分がやるとしたらどう手を動かすかを文章化できればいけるはず。
3もそのままforとifでできます。c言語で配列の要素の削除は大変なので、これも別に配列を用意してあげるのが簡単だと思います。
あとはこれにファイルの読み書きをつければおしまいです。このやり方はわかっていると思うので書きません。

プログラムは基本的に(最適化とかを考えなければ)紙の上で自分がやる方法をそのままコードに落とすだけなので、まずは紙の上で徹底的に手順を分解するところから始めると良いと思います(これもちょっと感性がいるので最初は大変かもですが……)

投稿2021/06/20 08:50

S.Percentage

総合スコア283

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

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

memudon

2021/06/20 08:59

ご丁寧にお答えいただきありがとうございます。 参考にしてやってみます。
guest

0

たとえば

C

1void str_lower(char* str) { 2 /* strの各文字について大文字を小文字にする */ 3}

この関数に "txtファイルから読み込んだ一行を与え、別のファイルに書く" を繰り返せばいい。

※ 「txtファイルの内容を次のようにフィルタリングしてそのまんま別のファイルに書き込むようなプログラム」なら書けますか? まずはそこから。

投稿2021/06/20 08:43

編集2021/06/20 08:49
episteme

総合スコア16612

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

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

memudon

2021/06/20 08:51

ご回答ありがとうございます。 そこから分かりませんがやってみます。
episteme

2021/06/20 09:04

そこが分ったうえでの問題ちゃうんか...
guest

0

過去の私の回答を参考にでもしてください。

まずはそこからです。

投稿2021/06/20 08:38

BeatStar

総合スコア4962

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問