ほんとにできなくて困ってます。
出来る方お願いします。
めちゃめちゃ急ぎです。
C言語です
ーーーー
コマンドラインに指定した名前のテキストファイルの中の文字数を画面に表示するプログラムを作りなさい。ただし名前の前に[-u][-l][-n]というスイッチをつけた場合、それぞれアルファベットの大文字、小文字数字だけを数えるようにし、getopt 関数は使用しないこと。ファイルには全角文字、改行コード以外の制御文字、英数字以外の文字は書かれてしないとして良い。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
まず、回答を書きますね。
もし、説明も必要ならコメントしてください。
#include <stdio.h> int main(int argc,char *argv[]) { if(argc >= 2) { FILE *file; char c; int num_of_char = 0;//ファイルの文字数 file = fopen(argv[1],"r"); if(file == NULL) { printf("file not open!"); return 0; } if(argc == 3) { while((c = fgetc(file)) != EOF) { switch (argv[2][1]) { case 'u': if((c >= 'A') && (c <= 'Z'))//その文字が大文字なら { num_of_char++; } break; case 'l': if((c >= 'a') && (c <= 'z'))//その文字が小文字なら { num_of_char++; } break; case 'n': if((c >= '0') && (c <= '9'))//その文字が数字なら { num_of_char++; } break; default: printf("the switch is not valid"); return 0; break; } } }else { while((c = fgetc(file)) != EOF) { num_of_char++; } } fclose(file); printf("%d",num_of_char); }else { printf("set file name!!"); return 0; } return 0; }
もしわかりにくい部分があれば遠慮なく教えてください。
投稿2022/09/19 07:37
総合スコア38
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
タグがC#なので、C#でかきます(それが私がこの質問に出あった理由なので、つまり今後他のC#で同じことしたいなと思った人が見に来る可能性があるということ)
csharp
1public class Program 2{ 3 public static int Main(string[] args) 4 { 5 if((args?.Length ?? 0) < 2) { return 0;} 6 var text = System.IO.File.ReadAllText(args[0]); 7 var f = new List<Func<char, bool>>(); 8 switch(args[1]) 9 { 10 case "-u" : f.Add(char.IsLetter);f.Add(char.IsUpper);break; 11 case "-l" : f.Add(char.IsLetter);f.Add(char.IsLower);break; 12 case "-n" : 13 default : f.Add(char.IsNumber);break; 14 } 15 return CountChars(text, f); 16 } 17 public static int CountChars(string text, IEnumerable<Func<char, bool>> validators) => text.Count(x => validators.All(y => y(x))); 18}
- Cでかくから、Fileの読み取りとか、判定とかで面倒なことしなきゃならない(初心者ほど他の言語からやるべき)
- この課題出した人は問題が分離できてないですね(事前に、ファイルを読むのと、文字列の処理を出題してれば別ですが、UNIX哲学わかってるなら、コマンドラインパラメータにファイル名を取るよりも、catにファイル名を入れて、中身をパイプで渡してカウントってやるはず。分かってない人に教えられればそりゃこういうところで答えをききたくもなる)
いちおうC#をcに変換してくれるかもしれないサービスを見つけたので共有しておきます。
投稿2019/01/22 05:09
総合スコア12705
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。