議論/標準入出力/ストリームによる実装/06.upperをlibcで書く


Top / 議論 / 標準入出力 / ストリームによる実装 / 06.upperをlibcで書く

このページは何か? (by ひげぽん)

upperをlibc関数だけで書きます。(書けるかどうかは知らない)

ログ

linux

 void toUpper(char* text, int length);
  
 int main(int argc, char *argv[])
 {
     if (argc > 1)
     {
         char* text = argv[1];
         toUpper(text, strlen(text));
         printf(text);
         return 0;
     }
  
     char* line = NULL;
     size_t len = 0;
     size_t readSize = getline(&line, &len, stdin);
     toUpper(line, readSize);
     printf(line);
     if (line)
     {
         free(line);
     }
     return 0;
 }
  
  
 void toUpper(char* text, int length)
 {
     for (int i = 0; i < length; i++)
     {
        text[i] = toupper(text[i]);
     }
 }
  

元ソース

 #include <monapi.h>
 #include <monalibc.h>
 #include <string>
  
 using namespace std;
  
 void toUpper(char* text, int length);
 string readLine();
  
 int MonaMain(List<char*>* pekoe)
 {
     // upper argument text
     if (pekoe->size() > 0)
     {
         char* text = pekoe->get(0);
         toUpper(text, strlen(text));
         monapi_stdout_write((byte*)text, strlen(text) + 1);
         return 0;
     }
  
     // upper string which read from stdin
     monapi_stdin_lock_for_read();
     string result = readLine();
     monapi_stdin_unlock_for_read();
     char* text = new char[result.size()];
     strcpy(text, result.c_str());
     toUpper(text, result.size());
     monapi_stdout_write((byte*)text, result.size());
     delete[] text;
     return 0;
 }
  
 string readLine()
 {
     string result("");
     for (;;) {
         byte buffer[256];
         dword size = monapi_stdin_read(buffer, 256);
         for (dword i = 0; i < size; i++)
         {
             result += buffer[i];
             if (buffer[i] == '\n' || buffer[i] == '\0') return result;
         }
     }
     return result;
 }
  
 void toUpper(char* text, int length)
 {
     for (int i = 0; i < length; i++)
     {
        text[i] = toupper(text[i]);
     }
 }
  

コメント

最新の1000件を表示しています。 コメントページを参照

お名前:
  • ほら又、getlineみたいなGNU拡張使ってる。 -- Yume 2006-11-17 (金) 16:30:24
    • ごめんなさいごめんなさいw -- ひげぽん 2006-12-17 (日) 23:51:07

MENU

now: 2

リンク


最新の20件
2018-10-07 2018-09-20 2018-09-03 2018-05-09 2017-09-29 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-05-29 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 2030, today: 2, yesterday: 0

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:48:03 (3855d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.020 sec.