//题目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. &lt;转&gt;云主机配置OpenStack使用spice的方法

    按官方文档(openstack-install-guide-yum-juno)搭建和配置的OpenStack默认使用novnc作为云主机的控制台訪问方式,假设须要配置使用GUI的操作系统,会显得比較尴 ...

  2. Unity3d中使用log4net

    原地址:http://www.cnblogs.com/koalaylj/archive/2012/09/04/2670629.html 最近在用unity3d开发Android上的游戏,一直Debug ...

  3. 【Leet Code】String to Integer (atoi) ——常考类型题

    String to Integer (atoi) Total Accepted: 15482 Total Submissions: 106043My Submissions Implement ato ...

  4. ssh 安装笔记

    debian 6.0 的一台32位机器,aptitude search openssh-server-x509 没结果(其他机同样源配置是有结果的),于是上内部源下载openssh-server-x5 ...

  5. android开机启动代码

    1)public class StartupReceiver extends BroadcastReceiver { @Override public void onReceive(Context c ...

  6. Spring MVC 中 AJAX请求并返回JSON

    一.以ModelAndView的方式返回 先看下JavaScript代码: /** * 保存-同步(版本控制库) */ function saveSynchronizedVcHorse(obj) { ...

  7. android中的byte数组转换(转)

    /** * 将一个单字节的byte转换成32位的int * * @param b * byte * @return convert result */ public static int unsign ...

  8. chrome 设置启动时打开特定一组网页

      chrome 设置启动时打开特定一组网页 CreateTime--2018年4月25日08:57:00 Author:Marydon 1.使用场景 经常有一些必用的网站,每天打开chrome都要依 ...

  9. linux内核——PAE(物理地址扩展)

    引入PAE机制后,分页模式是怎样的呢? 首先,要搞明白几件事,2.6.11以上版本的linux内核中,存在4中页表(页全局目录,页上级目录,页中级目录,页表),这些页表结构是已经存在于硬盘中的,当进程 ...

  10. oracle导出数据库dmp文件

    导出数据库为dmp文件,按照当前导出时间设置文件名称 @ECHO OFF ECHO 备份 SCOTT 用户的数据…… SET DBUserName=scott SET DBPassword= SET ...