Re: [問卦] C程式大神們請進

作者: Hazukashiine (私は幸せです)   2017-08-30 03:10:04
※ 引述《jserv (松鼠)》之銘言:
: 上述程式仍有改進空間,隨意列出:
: 1. 缺乏對於 EOF 的處理;
: 2. 程式碼忽略超出 50 個字元 (正確來說還要減去 NULL terminator) 的處理,
: 但可能會跟使用者期望有落差;
由於 C 語言不像 C++ 那樣有大量的模板庫可以用
所以 我找到了個專門為 C 語言撰寫的 linked list 容器來用
OpenGC3: https://github.com/kevin-dong-nai-jia/OpenGC3
然後增加了 (1) 對 EOL 的處理
(2) 可以處理無限多個字元 只要你的硬體也有足夠大
(3) 支持 Unicode UTF-8 編碼的字元
大家晚安 <3
==== 程式開始 ====
好讀版:https://gist.github.com/anonymous/aee4302b30d2d4c23f9404b48b9dd76f
#include <stdio.h> // for EOF / stderr
#include <stdlib.h> // for EXIT_FAILURE
#include <wchar.h> // for wcslen()
#include <wctype.h> // for to(upper|lower)()
#include <errno.h> // for errno
#include <locale.h> // for setlocale()
#include "src/list/ccxll.h" // for container ccxll(T)
typedef struct { wchar_t wc[8]; } wcb_t;
int main(void)
{
// assign locale
if (setlocale(LC_ALL, "en_US.UTF-8") == NULL) {
fprintf(stderr, "Failed to set locale LC_ALL = en_US.UTF-8.\n");
exit(EXIT_FAILURE);
}
// create a list container
ccxll_pckd(wcb_t) list;
ccxll_init_extd(list, 1, 1, 1);
// read from stdin
wcb_t str;
// invert cases (upper <-> lower)
while ((fgetws(str.wc, 8 - 1, stdin) != NULL)) {
if (ferror(stdin)) {
fprintf(stderr, "Encountered an invalid wide character.\n");
exit(EXIT_FAILURE);
}
for (size_t len = wcslen(str.wc), idx;
idx = len - 1, len != 0; len
作者: formatted (ゴミ丼 わがんりんにゃれ)   2016-08-30 03:10:00
你昨天被噓不夠呀?等等又被戰
作者: AppleOuO (AppleOuO)   2016-08-30 03:10:00
作者: cc02040326 (茶包)   2016-08-30 03:10:00
看不懂
作者: cyrel0070 (monkey)   2017-08-30 03:11:00
文組不懂幹推到
作者: derrick1220 (derrick)   2017-08-30 03:12:00
假古假怪
作者: limoncool (億載金城武 Limoncool)   2017-08-30 03:16:00
我覺得好麻煩
作者: LeonardoChen (LeonardoChen)   2017-08-30 03:17:00
誰想看別人的程式碼啊
作者: canblow (可吹)   2017-08-30 03:18:00
...
作者: NCTUFAIWEN (交大廢文王子)   2017-08-30 03:41:00
好的 來睏
作者: jaid (jaid)   2017-08-30 07:49:00
我記得OpenGC3也是C++版友的作品

Links booklink

Contact Us: admin [ a t ] ucptt.com