//题目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. Linux阅读笔记(一)

    1.关机命令 shutdown -h now             马上关机 shutdown -r now              马上重新启动 reboot                   ...

  2. nginx命令:启动,停止及命令参数详解

    nginx命令:启动nginx 在Windows上安装好nginx后,我们需要启动nginx服务,启动nginx服务的命令行操作主要有两种方式,即 1 C:/nginx-0.8.53>nginx ...

  3. scribe 搭建遇到的问题

    1.如果安装了多个boost版本或boost路径不是scribe脚本指定的话,会出现问题: checking whether the Boost::System library is availabl ...

  4. 在Jquery validation里验证通过后,自定义提交不同的action路径,适合一个窗口既可以作为添加对话框也可以作为编辑对话框

    $("#myform").validate({ debug: true, //调试模式取消submit的默认提交功能 ignore: '#Password,#ConfirmPass ...

  5. 〖Android〗(how-to) fix k860/k860i buletooth.

    bluedroid.so for k860/k860i 1./media/Enjoy/AndroidCode/cm10.1/device/lenovo/stuttgart/bluetooth/blue ...

  6. 纯css实现单行”截取“

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. Android -BLE蓝牙小DEMO

    代码地址如下:http://www.demodashi.com/demo/13890.html 原文地址: https://blog.csdn.net/vnanyesheshou/article/de ...

  8. 一个事件激活多个JavaScript函数

    http://www.cnblogs.com/meil/archive/2006/09/20/509359.html如果你的网页中一个“OnLoad”事件要激活两个以上的JavaScript函数,那怎 ...

  9. Python 列表 max() 方法

    描述 Python 列表 max() 方法返回列表元素中的最大值. 语法 max() 方法语法: max(L) 参数 L -- 要返回最大值的列表. 返回值 返回列表元素中的最大值. 实例 以下实例展 ...

  10. javascript、js操作json对象和字符串互相转换方法

    相信前端的同学们对json并不陌生,接触过很多.但是很少人知道json的全称是什么,哈哈,我也是查资料知道的.(JSON JavaScript Object Notation是一种轻量级的数据交换格式 ...