c言語ですmain関数でコマンドライン引数を受け取

Writer: admin Type: duanmo Date: 2019-03-06 00:00
c言語ですmain関数でコマンドライン引数を受け取り、受け取った引数(文字列)を全て、条件①に従って表示するプログラムを作成してください条件①:英小文字は対応する大文字に、英大文字は対応する小文字に、それ以外の文字は*に変換実行結果abcde 123 ZABCDE***zどなたかお願いします共感した0###Aは0x41aは0x61なので、私ならif文など使わずに*p ^= 0x20;これで大文字小文字の変換をします。0x41 を 0x20で xorすれば、01000001 xor 00100001 = 01100001同様に 0x61 を 0x20で xorすれば01100001 xor 00100001 = 01000001だからです。ナイス0
###この回答は投票によってベストアンサーに選ばれました!###~プログラム例~#include <stdio.h>#include <ctype.h>int 条件①(int 文字){ if (islower(文字)) return _toupper(文字); else if (isupper(文字)) return _tolower(文字); else return '*';}int main(int argc, char **argv){ const char* const * const end = &argv[argc]; while (++argv < end) { const char* 文字列 = *argv; while (*文字列) putchar(条件①(*文字列++)); putchar('\n'); } return 0;}《解説》【条件①:英小文字は対応する大文字に、英大文字は対応する小文字に、それ以外の文字は*に変換】#include <ctype.h> 内に islower, isupper, _toupper、_tolower というものがありまして、それぞれの機能は次の通りとなっています。islower 小文字であることを判定isupper 大文字であることを判定_toupper 小文字であることを前提に大文字に変換_tolower 大文字であることを前提に小文字に変換なお、toupper, tolower というものもあって、これは小文字・大文字を判定して変換の必要があれば大文字・小文字に変換します。条件①では事前に小文字・大文字の判定が住んでいるため toupper, tolower を使用するとその分の処理が二重となります。《参考意見》【プログラムを作成してください】というと、文字通り受け留めるとプログラムの作成依頼という風に読めてしまうのですが、そういう意味合いではないと考えました。プログラムの作り方をお知りになりたいということだと思います。それはそうと、この課題の要点としては #include <ctype.h> の使用になる気がしています。ASCII コードであることを仮定して、それで文字コードを直接弄る方法もあり得ます。でも、<ctype.h> 内の関数やマクロを使用すると非 ASCII コードにも対応できるというだけでなく、どういった処理を行っているのかが関数名等から明らかになるのでプログラムが分かりやすくなります。え?じゃなくて ASCII コードを直接弄るやり方が正解になってたって?そういう場合もあると思います。課題の意図はいろいろあり得るから。ナイス0
####include <stdio.h>#include <ctype.h>char trans(char c) {    if (isupper(c))        return tolower(c);    else if (islower(c))        return toupper(c);    else        return '*';}void print(const char* s) {    while (*s) {        putchar(trans(*s++));    }    putchar('\n');}int main(int argc, char *argv[]) {    for (int i = 1; i < argc; ++i) {        print(argv[i]);    }    return 0;}ナイス0
ico_check不適切な投稿でないことを報告###ちょっと面倒ですね。C言語の場合 argv[0] は、自分のプログラム名が入って引数は、1 ~ argc-1 までになります。toupper tolower とか使わなくても 'A' -'a' とかコードの差分でも計算できます。こんな感じですね。#include <stdio.h>int main(int argc,char *argv[]){ int i; char *p; for(i=1;i<argc;i++){ for(p=argv[i];*p;p++){ if(*p >= 'A' && *p <= 'Z'){ printf("%c",*p + 'a' - 'A'); }else if(*p >= 'a' && *p <= 'z'){ printf("%c",*p + 'A' - 'a'); }else{ printf("*"); } } printf("\n"); } return 0;}ナイス0

 

TAG