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