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

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

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

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

Q&A

4回答

4281閲覧

C言語でtxtファイルの文字列を変換させたい

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

0グッド

0クリップ

投稿2018/10/28 09:55

編集2018/10/28 10:27

#C言語でtxtファイルにある文字列を変換させたい
ある複数の文(英文)が一行目に書かれたtxtファイルの特定の文字を別の文字に変換させたいです.
具体的には文頭にある文字,iを大文字にさせたいです.(元のファイルではすべて小文字)
文章の最後は英文なので!や."や.や?で終わるのですが,処理をどうすればいいのでしょうか?
##自分で書いたコード

#include <stdio.h> char uppercase(char a){ int i = 'A' - 'a'; return a + i; } int main(){ char *sentence; int cnt_i = 0; FILE *fp; // ファイルポインタを宣言 fp = fopen("sentence.txt", "r"); // ファイルを開く while(fscanf(fp, "%s", sentence) != EOF){ // ファイルの読み込み fgets(sentence, 10000000, fp); } fclose(fp); // ファイルを閉じる // ここをどうすればいいのか... printf("%s\n", sentence); }

自分では上のようなコードまでを書きました.

#追記
このコード自体にも間違いがあるようなのですが,それも何を直せばいいのかよくわかりません...

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

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

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

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

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

guest

回答4

0

  1. ファイルを読み出しモードでオープンする
  2. 別のファイル名で書き込みモードでオープン、ファイル作成する
  3. 元ファイルからデータを読み出し、最初の文字を変更して書き込み
  4. 以降、ファイルを読み込んでそのまま書き込む
  5. 双方のファイルをクローズ
  6. 元ファイルを削除するか、ファイル名を変更
  7. 書き込みファイルのファイル名を元ファイルのファイル名に変更

という手順でファイルの変更/変換を行いましょう

投稿2018/10/28 10:01

y_waiwai

総合スコア87747

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

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

退会済みユーザー

退会済みユーザー

2018/10/28 10:33

その具体的な処理がよくわからないです(レベルが低くてすみません)
y_waiwai

2018/10/28 10:38

「C言語 ファイル読み込み」とか、「C言語 ファイル書き込み」とかでぐぐると、コードが見つかりますぜ
guest

0

おそらく、Cを学び始めて、初めて自分でプログラムを書いてみたくなったということだと思いますが、入門書をちゃんと読んでそこのサンプルプログラムを理解できるようになれば、これくらいのプログラムはちゃんと書けますので、あせらずに、入門書を最後まで読み通してみてください。
何も見ずに自分でプログラムを書くのはそれからです。

入門書のサンプルプログラムがどうしても理解できないときは、質問してください。

投稿2018/10/28 14:21

otn

総合スコア84499

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

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

0

Cなど不要。そう、シェル芸ならね!

bash

1$ sed -i '1s/^i /I /' sentence.txt

投稿2018/10/28 12:01

hichon

総合スコア5737

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

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

0

まず、sentenceは文字のポインタなので、fscanf(fp, "%s", sentence)でこけます。
読み込む領域を確保してそこに読み込むようにしましょう。
また、一行で10000000(10MB) もあるのでしょうか?

投稿2018/10/28 10:10

cateye

総合スコア6851

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

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

退会済みユーザー

退会済みユーザー

2018/10/28 10:32

``` #include <stdio.h> #include <stdlib.h> char uppercase(char a){ int i = 'A' - 'a'; return a + i; } int main(){ char *sentence; char *word; int cnt_i = 0; FILE *fp; // ファイルポインタを宣言 fp = fopen("sentence.txt", "r"); // ファイルを開く sentence = (char*)malloc(sizeof(sentence)); word = (char*)malloc(sizeof(word)); while(fscanf(fp, "%s", word) == EOF){ // ファイルの読み込み fgets(word, 10000000, fp); sentence[cnt_i] = *word; cnt_i ++; } fclose(fp); // ファイルを閉じる // ここをどうすればいいのか... printf("%s\n", sentence); } ``` このように変更を加えてみました. 行のは適当に決めました(大は小を兼ねるかと思いましたが,小さい方がいいですか?)
cateye

2018/10/28 11:14 編集

sizeof(sentence)もsizeof(word)もポインタサイズ(たぶん8バイト)しかないですが? 一行いくら(最大バイト数)有りますか? while(fscanf(fp, "%s", word) == EOF)←で入りますか?と、EOFの間ループするのですか? fgets(word, 10000000, fp);で10Mも読み込んでますがいいのですか? 各関数の仕様を調べた上で使っていますか? // http://www.c-tipsref.com/reference/stdio/fgets.html を参考にしてみて下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問