神奇的fgets

#我想表达个啥?看下面的代码咯 #include<stdio.h> #include<stdlib.h>

int main()
{
    FILE *file   = NULL;
    char *buffer = NULL;
    char *status = NULL;

    file = fopen("/home/ll/ps1", "r");

    buffer = (char *)calloc(1, sizeof(char)); //我只有一个空间0_0,好可怜

    status = fgets(buffer, 10, file);

    printf("%s\n", buffer); //0_o怎么输出了9个字符

    return 0;
}

转载于:https://my.oschina.net/luan/blog/179944

用C语言:在你的帮助下,YJ BG 成功通过最缓的坡路来到了山顶。山顶上,他们发现了一面古老而神奇的镜子。他们发现,这面镜子似乎并不能像正常的镜子一样反射出东西,而是按照一定的规律进行反射。 他们想出可以用一个由“连续数字串”和“连续非数字串”交替组成的字符串 𝑆 来表示在镜子前做出的动作,然后将这面奇迹之镜的反射规律抽象如下: • 遍历这个字符串,保持所有“非数字串”不变。 • 对于每一个“连续数字串”,执行以下计算,并用计算结果替换它: ◦ A) 求子串之和:计算该数字串的所有子串所代表的数值之和。 ◦ B) 逆转求和结果:将上一步得到的和进行数字逆转(此步会自然去除逆转后产生的前导零。特别地,若和即为 0 ,那么不省去)。 • 将处理过的序列重新拼接成最终的输出字符串。 • 例如: ◦ 读入 1234ABC4321。 ◦ 它的第一个连续数字串是 1234 ,它所包含的所有子串是 [ 1 , 12 , 123 , 1234 , 2 , 23 , 234 , 3 , 34 , 4 ] ,和为 1670 ,逆转后为 7 (舍去前导 0 ); ◦ 第二个连续数字串是 4321 ,它所包含的所有子串是 [ 4 , 43 , 432 , 4321 , 3 , 32 , 321 , 2 , 21 , 1 ] ,和为 5180 ,逆转后为 8 (舍去前导 0 )。 ◦ 拼接后输出 761ABC815。 现在,YJ BG 在镜子前做出了一系列动作,他们希望你能按照镜子的反射规律,给出转换后的动作。 输入格式 输入有若干行,每行包含一个动作字符串 𝑆 。保证字符串 𝑆 的长度不大于 10 4 ,且字符串内只包含数字英文字母。 输出格式 输出有若干行。针对每一组输入,输出一行,包含模拟后的动作字符串 𝑆 𝑖 。 测试样例 Input   1234ABC4321 A1B2C3D4 000A1B3C4D 01yjbg1399 Output   761ABC815 A1B2C3D4 0A1B3C4D 2yjbg112 题目注解 • 01yjbg1399 输出 2yjbg112 解释: ◦ 连续数字串 01 ,子串为 [ 01 , 1 ] ,和为 2 ,逆转后仍为 2 ; ◦ 下一个连续数字串 1399 同理处理,最终得到 2yjbg112。 30 % 的用例里字符串不包含任何数字(送分)。 30 % 的用例里字符串所包含的单个连续数字串长度不大于 4 。 保证新拼接出的字符串 𝑆 𝑖 长度不大于 10 5 。 保证子串求和后的结果在 long long 范围内。 对于不定行输入,想想上次实验课助教讲的内容。 string.h, ctype.h 里的 strlen, atoi, strcat, isalpha, isdigit 函数可能对你有用。 提示:本题的关键在于处理所有的连续数字串部分,而非数字串照常输出。那么有没有一种可能,我们可以不完全处理好所有子串再拼接成一整个新的字符串输出,而是一边处理、一边输出呢? 举个例子:从前到后遍历字符串,遇到字母就忽略(这个时候应该做什么?),遇到数字则开始处理。
10-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值