9.1

 #include <stdio.h>
#include <ctype.h>
#include <string.h> #define N 100 int main (void)
{
int i = ;
char strarray[N+]; //= "Hello world! \t3I'm here!";
char *input = strarray;
char ch;
unsigned int cont = ;
int ctr=, spc=, num=, low=, upp=, puc=, upr=;
float ctrf=, spcf=, numf=, lowf=, uppf=, pucf=, uprf=; printf("Please enter a string:\n"); while (( ch = getchar() ) != '\n')
{
*(input + i) = ch;
i++;
}
*(input + i) = '\0';
cont = strlen(input); while (*input != '\0')
{
if (iscntrl(*input))
ctr++;
if (isspace(*input))
spc++;
if (isdigit(*input))
num++;
if (islower(*input))
low++;
if (isupper(*input))
upp++;
if (ispunct(*input))
puc++;
if (!(isprint(*input)))
upr++;
input++;
} printf("\nTotle char number is: Count = %d\n", cont);
printf("cntrl = %d,\tspace = %d,\tdigit = %d\n", ctr, spc, num);
printf("lower = %d,\tupper = %d,\tpunct = %d\n", low, upp, puc);
printf("uprint = %d\n", upr); ctrf = (float)ctr/(float)cont;
spcf = (float)spc/(float)cont;
numf = (float)num/(float)cont;
lowf = (float)low/(float)cont;
uppf = (float)upp/(float)cont;
pucf = (float)puc/(float)cont;
uprf = (float)upr/(float)cont; printf("\nHere is the percent of every count:\n");
printf("cntrl = %.3f%%\nspace = %.3f%%\ndigit = %.3f%%\n",ctrf* , spcf*, numf*);
printf("lower = %.3f%%\nupper = %.3f%%\npunct = %.3f%%\n", lowf*, uppf*, pucf*);
printf("uprnt = %.3f%%\n", uprf*); getchar();
return ;
}

9.3

 #include <stdio.h>
#include <string.h> void my_strcpy(char *dst, char *src)
{
size_t len = , dstlen = , srclen = ;
dstlen = strlen(dst);
srclen = strlen(src); len = ( dstlen >= srclen ? srclen : dstlen );
strncpy(dst, src, len);
} void show_string(char *str)
{
while (*str != '\0')
printf("%c", *str++);
putchar('\n');
} int main (void)
{
char dst[] = "Hello";
char src[] = "I'm here!";
char *dstp = dst;
char *srcp = src; my_strcpy(dstp, srcp); show_string(dstp);
show_string(srcp); getchar();
return ;
}

9.4

 #include <stdio.h>
#include <string.h> #define M 12
#define N 16 void my_strcat(char *dst, char *src)
{
size_t len = , dstlen = , srclen = , restlen = ;
dstlen = strlen(dst);
srclen = strlen(src); len = ( (restlen = M - dstlen - ) > srclen ? srclen : restlen );
strncat(dst, src, len);
} void show_string(char *str)
{
while (*str != '\0')
printf("%c", *str++);
putchar('\n');
} int main (void)
{
char dst[M] = "Hello!";
char src[N] = "I'm here!";
char *dstp = dst;
char *srcp = src; my_strcat(dst, src); show_string(dstp);
show_string(srcp); getchar();
return ;
}

9.5

 #include <stdio.h>
#include <string.h> #define M 12
#define N 16 void my_strncat(char *dest, char *src, int dest_len)
{
size_t len = , dstlen = , srclen = , restlen = ;
dstlen = strlen(dest);
srclen = strlen(src); len = ( (restlen = dest_len - dstlen - ) > srclen ? srclen : restlen );
strncat(dest, src, len);
} void show_string(char *str)
{
while (*str != '\0')
printf("%c", *str++);
putchar('\n');
} int main (void)
{
char dst[M] = "Hello!";
char src[N] = "I'm here!";
char *dstp = dst;
char *srcp = src; my_strncat(dst, src, M); show_string(dstp);
show_string(srcp); getchar();
return ;
}

9.6

 #include <stdio.h>
#include <string.h> char *my_strcpy_end(char *dst, char *src)
{
int i, dstlen = , srclen = ; dstlen = strlen(dst);
srclen = strlen(src); if ( dstlen >= srclen )
strcpy(dst, src);
else
strncpy(dst, src, dstlen); for ( i = ; *(dst + i) != '\0'; i++);
return dst + i;
} int main (void)
{
char *p = NULL;
char dst[] = "Hello world";
//char src[] = "123456789";
char src[] = ""; p = my_strcpy_end(dst, src); printf("%c\n", *(p - )); getchar();
return ;
}

9.8

 #include <stdio.h>
#include <string.h> char *my_strnchr( char const *str, int ch, int which )
{
int i;
char *p = NULL;
p = str; for ( i = ; i < which; i++)
{
if ( i != )
p++;
p = strchr(p, ch);
} return p;
} int main (void)
{
int i;
char str[] = "Hello world!";
int chr = 'l';
int which = ; char *find = my_strnchr(str, chr, which); for (i = -; i < ; i++)
printf("%c\t", *(find + i));
putchar('\n'); getchar();
return ;
}

9.9

 #include <stdio.h>
#include <string.h> int count_chars(char const *str, char const *chars)
{
int count = , len = ;
char *pos = NULL;
pos = str; while (( pos = strpbrk(pos, chars) ) != NULL )
{
count++;
pos++;
} return count;
} int main (void)
{
char str[] = "Hello world!";
char chars[] = "ero"; printf("%d\n", count_chars(str, chars)); getchar();
return ;
}

9.10

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h> int palindrome( char *string )
{
int i, j = ;
int len = strlen(string);
char *strcopy = NULL;
strcopy = malloc((len + )* sizeof(char));
for (i = ; i < len; i++) //将源字符串中的非字母字符去掉,并将剩下的字母转换为小写
{
if (isalpha(*(string + i)))
{
*(strcopy + j) = tolower( *(string + i) );
j++;
}
}
*(strcopy + j) = '\0'; len = strlen(strcopy);
for (i = ; i < (len / ); i++)
{
if ( (*(strcopy + i)) != (*(strcopy + (len - i - ) ) ) )
return ;
} return ;
} int main (void)
{
char string[] = "Madam, I'm Adam!";
int result = ; result = palindrome(string);
printf("%d\n", result); getchar();
return ;
}

9.11

 #include <stdio.h>
#include <string.h> int main (void)
{
char input[];
char chars[] = "the";
int i = , count = ;
char *pos = NULL; printf("Please enter some words: \n");
scanf("%s", input);
printf("%s\n", input); pos = input;
while ((pos = strstr(pos, chars)) != NULL)
{
pos++;
count++;
} printf("There are %d \"%s\"!", count, chars); getchar();
getchar();
return ;
}

9.12  9.13  9.14

 #include <stdio.h>
#include <string.h>
#include <ctype.h> char *init_alp(char *temp)
{
int i;
char alp = 'A'; for (i = ; i < ; i++)
{ *(temp + i) = alp;
alp++;
}
*(temp + i) = '\0'; return temp;
} int prepare_key( char *key ) //生成key
{
int i = , j = , k = ;
char alp[];
char *temp = alp; char *p = NULL; if (key == NULL) //key为空,退出
return ; for (i = ; *(key + i) != '\0'; i++)
if (!(isalpha(*(key + i)))) //key中含有非字母字符,退出)
return ; for (i = ; *(key + i) != '\0'; i++)
{
if (*(key + i) != ' ') //删除所有的空格
{
for (j = i + ; *(key + j) != '\0'; j++) //将重复的字母赋值为空格
{
if ( *(key + i) == *(key + j) )
*(key + j) = ' ';
}
*(key + k) = toupper(*(key + i));
k++;
}
}
*(key + k) = '\0'; temp = init_alp(temp); //初始化为大写字母表
p = temp;
while ((p = (strpbrk(p, key))) != NULL) //将字母表中含有key中的字母设置为空格
{
*p = ' ';
p++;
} for (i = , k = ; *(temp + i) != '\0'; i++) //删除所有的空格
{
if (*(temp + i) != ' ')
{
*(temp + k) = *(temp + i);
k++;
}
}
*(temp + k) = '\0'; key = strcat(key, temp); return ;
} void encrypt( char *data, char const *key ) //给数据加密
{
int i, state;
char temp[];
char *init = NULL;
char *p = NULL;
char chg; init = init_alp(temp); for (i = ; *(data + i) != '\0'; i++)
{
if (isalpha(*(data + i)))
{
if (isupper(*(data + i)))
state = ;
else
{
*(data + i) = toupper(*(data + i));
state = ;
}
p = strchr(init, *(data + i));
chg = *(key + (p - init));
*(data + i) = state ? chg : tolower(chg);
}
}
} void decrypt( char *data, char const *key ) //给数据解密
{
int i, state;
char temp[];
char *init = NULL;
char *p = NULL;
char chg; init = init_alp(temp); for (i = ; *(data + i) != '\0'; i++)
{
if (isalpha(*(data + i)))
{
if (isupper(*(data + i)))
state = ;
else
{
*(data + i) = toupper(*(data + i));
state = ;
}
p = strchr(key, *(data + i));
chg = *(init + (p - key));
*(data + i) = state ? chg : tolower(chg);
}
}
} int main (void)
{
char key[] = "Hellomnnnnab";
char temp[];
char *key_m = temp;
char data[] = "Hello world!"; key_m = init_alp(key_m);
printf("%s\n", key); //显示输入的key if (prepare_key(key))
{
printf("\nAlpha: \n"); //显示大写字母表
printf("%s\n", key_m);
printf("\nKey: \n"); //显示生成的key秘钥
printf("%s\n", key); printf("\nEncode: \n");
printf("%s\n", data);
encrypt(data, key); //加密
printf("%s\n", data); printf("\nDecode: \n");
printf("%s\n", data);
decrypt(data, key); //解密
printf("%s\n", data);
}
else
printf("Key error!\n"); getchar();
return ;
}

9.15

 #include <stdio.h>
#include <string.h>
#include <ctype.h> void dollars(char *dest, char const *src)
{
int i, j, srclen = , offset = , state = ;
int a = , b = ;
char *destbak = NULL;
destbak = dest; srclen = strlen(src);
*dest++ = '$'; if (srclen >= )
{
a = (srclen - ) / ;
b = (srclen - ) % ; for (i = ; (i < a); i++)
{
if ( i == )
{
for (j = ; j < b; j++)
{
*(dest++) = *(src++);
}
} if (b != )
*(dest++) = ','; for (j = ; j < ; j++)
*(dest++) = *(src++);
} if ((a == ) && (b != ))
{
for (j = ; j < b; j++)
{
*(dest++) = *(src++);
}
}
*((dest++)) = '.'; for ( ; *(src) != '\0';dest++, src++)
*(dest) = *(src);
*(dest) = '\0';
}
else
{
memset(dest, '', );
*(++dest) = '.';
dest++;
for (i = ; i < - srclen; i++)
*(dest++) = ''; for (i = ; i < srclen; i++)
*(dest + i) = *(src + i);
}
} int dollchk(char *src) //检查要处理的数据中是否有非数字字符
{
int i;
for (i = ; *(src + i) != '\0'; i++)
{
if (!isdigit(*(src + i)))
{
return ;
}
}
return ;
} int main (void)
{
char temp[] = { }; //目标缓存
char dollar[];
char *dest = temp;
int state = ; printf("Please enter some numbers: \n");
scanf("%s", dollar); state = dollchk(dollar);
if (!state) //检查要处理的数据中含有非数字字符,报错,退出
{
printf("Data error!\n");
getchar();
getchar();
return ;
} printf("%s\n", dest);
printf("%s\n", dollar); dollars(dest, dollar);
if (*dest != '\0')
printf("%s\n", dest); getchar();
getchar();
return ;
}

9.16

 #include <stdio.h>
#include <string.h> int format( char *format_string, char const *digit_string )
{
int formatlen = strlen(format_string);
int digitlen = strlen(digit_string);
int i, j, k;
char *p = NULL; if (formatlen < digitlen)
return ;
if ((*digit_string) == '\0')
return ; if ((p = strchr(format_string, '.')) != NULL)
{
if ((k = formatlen - (p - format_string)) > digitlen)
{
for (i = formatlen, j = digitlen; j >= ; i--, j--, k--)
{
*(format_string + i) = *(digit_string + j);
} for (; k > ; i--, k--)
{
*(format_string + i) = '';
} if ( (*(format_string + i) == '.') )
{
i--;
*(format_string + i) = '';
} for (i--; i >= ; i--)
{
*(format_string + i) = ' ';
}
}
else
{
for (i = formatlen, j = digitlen; j >= ; i--, j--)
{
if ( (*(format_string + i) == ',')
|| (*(format_string + i) == '.') )
i--;
*(format_string + i) = *(digit_string + j);
}
for (; i >= ; i--)
*(format_string + i) = ' ';
}
} return ;
} int main (void)
{
char formats[] = "###,###.#####";
char const digits[] = ""; printf("%s\n", formats);
printf("%s\n", digits);
if (format(formats, digits))
printf("%s\n", formats);
else
printf("Data error!\n"); getchar();
return ;
}

9.17

《C和指针》章节后编程练习解答参考——第9章的更多相关文章

  1. 《C和指针》章节后编程练习解答参考——第5章

    5.1 题目: 略 解答代码: #include <stdio.h> int main(void) { char ch; while (((ch = getchar()) != EOF) ...

  2. 《C和指针》章节后编程练习解答参考——第10章

    10.1 #include <stdio.h> typedef struct { unsigned ]; unsigned ]; unsigned ]; }TelphoneNumber; ...

  3. 《C和指针》章节后编程练习解答参考——第8章

    8.1 #include <stdio.h> int main (void) { int a, b, c, d; // 不使用嵌套花括号初始化 unsigned ][][][] = { , ...

  4. 《C和指针》章节后编程练习解答参考——6.2

    <C和指针>——6.2 题目: 编写一个函数,删除源字符串中含有的子字符串部分. 函数原型: int del_substr(char *str, char const *substr); ...

  5. 《C和指针》章节后编程练习解答参考——6.3

    <C和指针>——6.3 题目: 编写一个函数,把参数字符串中的字符反向排列. 函数原型: void reverse_string(char *string); 要求: 使用指针而不是数组下 ...

  6. 《C和指针》章节后编程练习解答参考——6.6

    <C和指针>——6.6 题目: 在指定的下限.上限之间使用数组方法查找质数,并将质数提取出来. 要求: 略 解答代码: #include <stdio.h> #define U ...

  7. 《C和指针》章节后编程练习解答参考——6.4

    <C和指针>——6.4 题目: 质数是只能被1和本身整除的整数. 在1到1000之间的质数,在数组中剔除不是质数的数. 解答代码: #include <stdio.h> #de ...

  8. 《C和指针》章节后编程练习解答参考——6.1

    <C和指针>——6.1 6.1 题目: 编写一个函数,在一个字符串中进行搜索,查找另一子字符串中出现的字符. 函数原型如下: char *find_char(char const *sou ...

  9. DSAPI多功能组件编程应用-参考-Win32API常数

    DSAPI多功能组件编程应用-参考-Win32API常数 在编程过程中,常常需要使用Win32API来实现一些特定功能,而Win32API又往往需要使用一些API常数,百度搜索常数值,查手册,也就成了 ...

随机推荐

  1. 【S13】vector和string优先于动态分配的内存

    1.使用new动态分配内存,必须承担如下责任: a.使用delete释放内存: b.确保使用了正确的形式,delete与new的形式要匹配: c.不能重复delete. 2.使用vector和stri ...

  2. MonkeyRunner源码分析之工作原理图

    http://www.androidchina.net/1315.html

  3. 密钥,密钥对,公钥,pfx,jks和https的几个概念

    密钥: 我理解是公钥+私钥的统称. 密钥对: 公钥(证书)和私钥成对存在. 通信双方各持有自己的私钥和对方的公钥.自己的私钥需密切保护,而公钥是公开给对方的.在windows下,单独存在的公钥一般是后 ...

  4. Redis学习手册(管线)

    一.请求应答协议和RTT: Redis是一种典型的基于C/S模型的TCP服务器.在客户端与服务器的通讯过程中,通常都是客户端率先发起请求,服务器在接收到请求后执行相应的任务,最后再将获取的数据或处理结 ...

  5. 由 Windows 向 Linux 迁移字体 和 Linux 等宽字体

    1. From Windows Windows下字体库的位置为C:\Windows\fonts,这里面包含所有windows下可用的字体.2. To Linux linux的字体库是 /usr/sha ...

  6. .Net设计模式_工厂模式(2)

    2.工厂方法模式 引言: 上一篇中我们描述了简单工厂的缺点,而解决方法就是把工厂接口化,把工厂的行为标准化,这就是工厂方法模式. 理解: 工厂能制造A和B鞋,如果消费者现在要求制造C鞋.D鞋...咋办 ...

  7. Android(java)学习笔记153:layout_weight使用注意事项

    1. android:layout_weight使用说明: layout_weight是权重的意思,也就是各个控件所占的比重,用在LinearLayout布局中.当我们使用layout_weight的 ...

  8. 移动端 touch 实现 拖动元素

    var homeMove = (function () { //touch自适应 var k = "ontouchend" in window ? "touchend&q ...

  9. Maven笔记(二)仓库

    1.仓库布局 任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径,这就是Maven的仓库布局方式 路径与坐标的对应关系为:groupId/artifactId/version/ ...

  10. asp.net Ajax Post 请求一般处理程序

    其实很早就开通博客园了,一直想写些有价值的东西,供自己以后查阅的同时,也可以帮助别人遇到此类问题时能有一个好的解决方法.但是由于各种原因, 就没有实施我的想法.今天突然很想写下一篇文章,不知道我的第一 ...