1.练习1-8 编写一个统计空格、制表符与换行符个数的程序2.1-9 编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替3.1-10 编写一个将输入复制到输出的程序,并将其中的制表符替换为\t,把回退符 替换为\b,把反斜杠替按为\\。这样可以将制表符和回退符以可见的方式显示出来。4.1-12 编写一个程序,以每行一个单词的形式打印其输入5.1-13 编写一个程序,打印输入中单词长度的直方图6.1-14 编写一个程序,打印输入中各个字符出现频度的直方图7.1-17 编写一个程序,打印长度大于 80 个字符的所有输入行8.1-18 编写一个程序,删除每个输入行末尾的空格及制表符,并删除完全是空格的行9.1-19 编写函数 reverse(s),将字符串 s 中的字符顺序颠倒过来。使用该函数 编写一个程序,每次颠倒一个输入行中的字符顺序10.1-20 编写程序 detab,将输入中的制表符替换成适当数目的空格,使空格充满到 下一个制表符终止位的地方11.1-21 编写程序 entab,将空格串替换为最少数量的制表符和空格,但要保持单词 之间的间隔不变12.1-22 编写一个程序,把较长的输入行“折”成短一些的两行或多行,折行的位置 在输入行的第 n 列之前的最后一个非空格之后。要保证程序能够智能地处理输入行很长以及 在指定的列前没有空格或制表符时的情况13.1-23 编写一个删除 C 语言程序中所有的注释语句14.1-24 编写一个程序,查找 C 语言程序中的基本语法错误,如圆括号、方括号、花 括号不配对等。要正确处理引号(包括单引号和双引号)、转义字符序列与注释15.2-1 编写一个程序以确定分别由 signed 及 unsigned 限定的 char、short、 int 与 long 类型变量的取值范围16.2-2 在不使用运算符&&或||的条件下编写一个与上面的 for 循环语句等价的循 环语句
17.2-3 编写函数 htoi(s),把由十六进制数字组成的字符串(包含可选的前缀 0x 或 0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0~9、a~f 以及 A~F
18.2-4 编写函数squeeze(s1, s2),将字符串 s1 中任何与字符串 s2 中字符匹配的字符都删除19.2-5 编写函数 any(s1, s2),将字符串 s2 中的任一字符在字符串 s1 中第一次 出现的位置作为结果返回。如果 s1 中不包含 s2 中的字符,则返回-120.2-6 编写一个函数 setbits(x, p, n, y),该函数返回对 x 执行下列操作后 的结果值:将 x 中从第 p 位开始的 n 个(二进制)位设置为 y 中最右边 n 位的值,x 的其余 各位保持不变21.2-7 编写一个函数 invert(x, p, n),该函数返回对 x 执行下列操作后的结 果值:将 x 中从第 p 位开始的 n 个(二进制)位求反(即,1 变成 0,0 变成 1),x 的其余各 位保持不变22.2-8 编写一个函数 rightrot(x, n),该函数返回将 x 循环右移(即从最右端 移出的位将从最左端移入)n(二进制)位后所得到的值23.2-9 在求对二的补码时,表达式 x &= (x – 1)可以删除 x 中最右边值为 1 的 一个二进制位,用这一方法重写 bitcount 函数,以加快其执行速度24.3-1 在上面有关折半查找的例子中,while 循环语句内共执行了两次测试,其实 只要一次就足够(代价是将更多的测试在循环外执行)。重写该函数,使得在循环内部只执行 一次测试。比较两种版本函数的运行时间25.3-2 编写一个函数 escape(s, t),将字符串 t 复制到字符串 s 中,并在复制 过程中将换行符、制表符等不可见字符分别转换为\n、\t 等相应的可见的转义字符序列。要 求使用 swich 语句。再编写一个具有相反功能的函数,在复制过程中将转义字符序列转换为 实际字符26.3-3 编写函数 expand(s1, s2),将字符串 s1 中类似于 a-z 一类的速记符号 在字符串 s2 中扩展为等价的完整列表 abc…xyz。该函数可以处理大小写字母和数字,并可 以处理 a-b-c、a-z0-9 与-a-z 等类似的情况Archlinux
GCC 13.1.1 20230429
2023-07-22 19:48:23 星期六
点击查看代码
#include<stdio.h>
#include<ctype.h>
int htoi( const char *s );
int main()
{
char arr[4] = "0x3A";
int result = htoi(arr);
printf("%d\n", result);
return 0;
}
int htoi( const char *s )
{
int i, out;
i = out = 0;
//处理前缀
if( s[0] == '0' && ( s[1] == 'x' || s[1] == 'X') )
i = 2;
//处理字符串
while( s[i] != '\0' )
{
int tmp = 0;
char c_tmp = s[i];
if( isdigit(c_tmp) ){
tmp = c_tmp - '0';
}
else if( c_tmp >= 'A' && c_tmp <= 'F' ){
tmp = c_tmp - 'A' + 10;
}
else{
puts("字符非法!");
}
out = out * 16 + tmp;
++i;
}
return out;
}
运行截图:
0x3A的十进制数是58,输出正确。
小白刚学习C语言,代码质量不高,欢迎评论。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南