//题目57:编写一个业务函数,实现字符串(前后各有三个空格,单词前后也均有空格)
//" i am student, you are teacher " ,
//各个单词首字符大写,结果如下" i am student, you are teacher " ,
//要求1:实现所有接口 70
//要求2:写出测试程序 30 #include<stdio.h>
#include<stdlib.h>
#include<string.h> //需求解析:实现英语句子中各个单词首字符大写(字符串不确定)
//思路:①遍历句子中所有的字符,找出所有的空格
//②只要发现非空格,就将字符一个个存入数组中,直到遇到空格位置,生成一个字符串数组,数组中存储所有的单词
//③ 重新拼接英文句子 //处理英语句子
int ProtectEnglish(const char * pinstr/*in*/, char *pout/*in*/){
int ERRO_MSG = ;
if (pinstr == NULL || pout == NULL)
{
ERRO_MSG = ;
printf("pinstr == NULL || pout==NULL erro msg:%d\n", ERRO_MSG);
return ERRO_MSG;
}
int i = , j = ,k=;
//获取字符串的长度
int index = strlen(pinstr);
int index2 = index;
//定义返回字符串
char *resstr = pout;
memset(resstr, , sizeof(char)*(index + ));
//定义单词个数
int numx = ;
//定义存储字符串的二维数组
char **ptemp1 = (char **)malloc(sizeof(char *));
//定义单词个数
int num2 = ;
//定义单词中字符个数
int num = ;
//分配单个单词存数数组
char *ptemp2 = NULL;
while (index--){
if (*pinstr!=' ')
{
char tempc = ;
if (num==)
{
ptemp2 = (char *)malloc(sizeof(char));
//处理非字母字符
if ((int)*pinstr> && (int)*pinstr<)
{
//首字母大写
tempc = (int)*pinstr - ;
}
else{
tempc = *pinstr;
} }
else{
//重新分配内存空间
ptemp2 = (char *)realloc(ptemp2, sizeof(char)*(num));
tempc = *pinstr;
}
//存储单个字符
ptemp2[num - ] = tempc;
num++;
}
else{
//当遇到空格时开始计数下一个单词
if (num>)
{
//确保每个单词都是字符串
ptemp2 = (char *)realloc(ptemp2, sizeof(char)*(num));
ptemp2[num - ] = '\0';
if (num2>)
{
ptemp1 = (char **)realloc(ptemp1, sizeof(char *)*(num2+));
}
//将上一个单词加入数组
ptemp1[num2] = ptemp2;
num2++;
//开始下一个单词
num = ;
}
} pinstr++;
}
//重新拼接单词
if (num2>)
{
//前后各有三个空格,单词前后也均有空格
resstr[] = ' ';
resstr[] = ' ';
resstr[] = ' ';
resstr[index2 - ] = ' ';
resstr[index2 - ] = ' ';
for (i = ; i < num2; i++)
{
//判断每个单词的长度
//暂时没有想到其他设计可以把每个单词填充到一个字符数组里
int num3 = strlen(ptemp1[i]);
for (j = ; j < num3; j++)
{
resstr[k] = ptemp1[i][j];
k++;//数组的自增设计--适用与根据内部条件自增
}
resstr[k] = ' ';
k++;
//释放内存
free(ptemp1[i]);
ptemp1[i] = NULL;
}
//释放内存
free(ptemp1);
ptemp1 = NULL;
}
return ERRO_MSG;
} void main(){
char *english = " i am student , you are teacher ";
char *pstr = (char *)malloc(sizeof(char)*(strlen(english) + ));
ProtectEnglish(english, pstr);
printf("执行之后的字符串是%s\n", pstr);
free(pstr);
pstr = NULL;
system("pause");
}

C语言 百炼成钢21的更多相关文章

  1. C语言 百炼成钢19

    /* 题目55: 有一个字符串符合以下特征(”abcdef,acccd,eeee,aaaa,e3eeeee,sssss,";),要求写一个函数(接口),输出以下结果 1) 以逗号分割字符串, ...

  2. C语言 百炼成钢8

    //题目22:两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定 //比赛名单.有人向队员打听比赛的名单.a说他不和x比,c说他不和x, z比,请编程序找出 //三 ...

  3. C语言 百炼成钢4

    //题目10:打印楼梯,同时在楼梯上方打印两个笑脸. #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdli ...

  4. C++语言基础(21)-异常

    C++语言本身或者标准库抛出的异常都是 exception 的子类,称为标准异常(Standard Exception).你可以通过下面的语句来捕获所有的标准异常: try{ //可能抛出异常的语句 ...

  5. C语言基础(21)-C语言编译过程及GCC参数简介

    任何C语言的编译过程可分为以下三部分: 一.预编译 在C语言中,以#开头的语句又叫预编译指令.预编译主要做以下两件事情: 1.将#include包含的头文件做简单的文本替换: 2.将代码中的注释删除. ...

  6. Java入门 - 语言基础 - 21.Scanner类

    原文地址:http://www.work100.net/training/java-scanner.html 更多教程:光束云 - 免费课程 Scanner类 序号 文内章节 视频 1 概述 2 使用 ...

  7. C语言 百炼成钢3

    //题目7:用*号输出空心菱形图案 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> # ...

  8. C语言 百炼成钢2

    //题目4:输入某年某月某日,判断这一天是这一年的第几天? #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<st ...

  9. C语言 百炼成钢1

    //题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> ...

随机推荐

  1. vim 如何编辑 GB2312 编码的文件?

    vim 如何编辑 GB2312 编码的文件? 彻底搞清楚字符编码: ASCII, ISO_8859, GB2312,UCS, Unicode, U 结合file和iconv命令转换文件的字符编码类型 ...

  2. vue - 页面跳转

    HTML:a 小程序:navigator Vue:router-link 1. router-link => a标签 2. javascript标签跳转页面 2.1   2.2 3. 常用方法之 ...

  3. GDB高级使用方法

    1.设置环境变量 用户可以在GDB的调试环境中定义自己需要的变量,用来保存一些调试程序中的运行数据.要定义一个GDB的变量很简单,只需使用GDB的set命令. GDB的环境变量和Linux一样,也是以 ...

  4. 算法笔记_021:广度优先查找(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力法 1 问题描述 广度优先查找(Breadth-first Search,BFS)按照一种同心圆的方式,首先访问所有和初始顶点邻接的顶点,然后是离它两条边 ...

  5. studio快捷键

  6. OJ帐号保存

    TOJ 614173971 HDU 宇智波佐助 POJ shiai ZOJ henyumen UVa henyumen Light OJ HENYUMEN bzoj henyumen ural 165 ...

  7. 浅析CentOS和RedHat Linux的区别(转)

    CentOS的简介 CentOS是Community ENTerprise Operating System的简称,我们有很多人叫它社区企业操作系统,不管你怎么叫它,它都是Linux操作系统的一个发行 ...

  8. 纯CSS实现蜂窝六边形的个性相册

    概述 纯CSS实现蜂窝六边形的个性相册 详细 代码下载:http://www.demodashi.com/demo/12804.html 此案例主要用到CSS3的 transform 和 transi ...

  9. linux实现ssh免密码登录

    linux实现ssh免密码登录 本地系统执行 ssh-keygen -t rsa 命令,生成密钥文件 在相应的目录下查看生成的密钥文件,其中:id_rsa为私钥文件,id_rsa.pub为公钥文件 本 ...

  10. VirtualBox虚拟机扩容

    1. 在VBox下增加储存 如图,未扩容前是40G 打开cmd命令行(win+r  输入cmd打开) 将目录切换到virtual的安装目录 cd C:\Program Files\Oracle\Vir ...