C语言 百炼成钢21
//题目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的更多相关文章
- C语言 百炼成钢19
/* 题目55: 有一个字符串符合以下特征(”abcdef,acccd,eeee,aaaa,e3eeeee,sssss,";),要求写一个函数(接口),输出以下结果 1) 以逗号分割字符串, ...
- C语言 百炼成钢8
//题目22:两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定 //比赛名单.有人向队员打听比赛的名单.a说他不和x比,c说他不和x, z比,请编程序找出 //三 ...
- C语言 百炼成钢4
//题目10:打印楼梯,同时在楼梯上方打印两个笑脸. #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdli ...
- C++语言基础(21)-异常
C++语言本身或者标准库抛出的异常都是 exception 的子类,称为标准异常(Standard Exception).你可以通过下面的语句来捕获所有的标准异常: try{ //可能抛出异常的语句 ...
- C语言基础(21)-C语言编译过程及GCC参数简介
任何C语言的编译过程可分为以下三部分: 一.预编译 在C语言中,以#开头的语句又叫预编译指令.预编译主要做以下两件事情: 1.将#include包含的头文件做简单的文本替换: 2.将代码中的注释删除. ...
- Java入门 - 语言基础 - 21.Scanner类
原文地址:http://www.work100.net/training/java-scanner.html 更多教程:光束云 - 免费课程 Scanner类 序号 文内章节 视频 1 概述 2 使用 ...
- C语言 百炼成钢3
//题目7:用*号输出空心菱形图案 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> # ...
- C语言 百炼成钢2
//题目4:输入某年某月某日,判断这一天是这一年的第几天? #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<st ...
- C语言 百炼成钢1
//题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> ...
随机推荐
- [笔记][Java7并发编程实战手冊]3.8 并发任务间的数据交换Exchanger
[笔记][Java7并发编程实战手冊]系列文件夹 简单介绍 Exchanger 是一个同步辅助类.用于两个并发线程之间在一个同步点进行数据交换. 同意两个线程在某一个点进行数据交换. 本章exchan ...
- 如何使用angularjs操作cookie
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- 算法笔记_036:预排序(Java)
目录 1 问题描述 2 解决方案 2.1 检验数组中元素的唯一性 2.2 模式计算 1 问题描述 在计算机科学中,预排序是一种很古老的思想.实际上,对于排序算法的兴趣很大程度上是因为这样一个事实: ...
- TP框架中关于if、else 分支结构逻辑错误
TP框架中关于if.else 分支结构逻辑错误 代码中没有任何错误 将注释往下一行就可以解决 造成问题的原因: TP框架中 想分配变量可以使用assign方法 在[模块]中: $this->as ...
- Java中try catch finally的执行顺序问题
finally 语句块是在 try 或者 catch 中的 return 语句之前执行的.更加一般的说法是,finally 语句块应该是在控制转移语句之前执行,控制转移语句除了 return 外,还有 ...
- linux之进程管理详解
|-进程管理 进程常用命令 |- w查看当前系统信息 |- ps进程查看命令 |- kill终止进程 |- 一个存放内存中的特殊目 ...
- iOS主题/皮肤之SakuraKit
概述 目前市场上很多 App 都有主题变更.皮肤切换的功能.随着项目代码量的不断增长,业务不断完善,功能性代码逐渐趋于模块化,尤其是在多人协作开发同一个项目时,模块解耦尤为重要,同时,公共基础库的功能 ...
- SuperMap iObjects for Spark使用
本文档环境基于ubuntu16.04版本,(转发请注明出处:http://www.cnblogs.com/zhangyongli2011/ 如发现有错,请留言,谢谢) 1. 基础环境搭建 基础环境搭建 ...
- Mysql导入大SQL文件数据问题
如果sql文件过大,会出现mysql out of memory (Needed XXX bytes) ,或者 "MySQL server has gone away"问题; 另 ...
- Android开发优化之——对界面UI的优化(1)
在Android应用开发过程中,屏幕上控件的布局代码和程序的逻辑代码通常是分开 的.界面的布局代码是放在一个独立的xml文件中的,这个文件里面是树型组织的,控制着页面的布局.通常,在这个页面中会用到很 ...