編寫一個業務函數,實現字符串(前後各有三個空格,單詞前後也均有空格) " i am student, you are teacher " , 各個單詞首字符大寫

編寫一個業務函數,實現字符串(前後各有三個空格,單詞前後也均有空格)
"   i am student, you are teacher   " 
各個單詞首字符大寫,結果如下"   i am student,  you are teacher   " 
要求1:實現所有接口  70
要求2:寫出測試程序  30
*/


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int GetString(const char *str1 /*in*/, char *str2 /*in*/);
int GetString_Adv(const char *str1/*in*/, char **str2 /*out*/);
int GetString_Adv_Free1(char *str2);
int GetString_Adv_Free2(char **str2);


int GetString(const char *str1 /*in*/, char *str2 /*in*/)
{
int ret = 0;
char *p1 = NULL, *p2 = NULL;
int len = 0, i = 0;


if (str1 == NULL || str2 == NULL)
{
ret = -1;
return ret;
}
len = strlen(str1);


//
strcpy(str2, str1);


//初始化循環環境
p1 = str2 + 1;
p2 = str2;
for (i = 0; i<len && (*p1 != NULL); i++)
{
if (isalpha(*p1) && isspace(*p2))
{
*p1 = *p1 - 32;
}


//打造循環條件
p2 = p1;
p1++;
}


return ret;
}


void main01()
{
int ret = 0;
const char *str1 = "     i am student, you are teacher   ";
char buf[1024] = { 0 };


ret = GetString(str1 /*in*/, buf /*in*/);
if (ret != 0)
{
printf("func GetString() err:%d \n", ret);
return ret;
}
printf("buf:%s \n", buf);


system("pause");
}
int GetString_Adv(const char *str1/*in*/, char **str2 /*out*/)
{
int ret = 0;
char *p1 = NULL, *p2 = NULL;
char *ptmp = NULL;
int len = 0, i = 0;


if (str1 == NULL || str2 == NULL)
{
ret = -1;
return ret;
}
len = strlen(str1);


ptmp = (char *)malloc((len + 1) * sizeof(char));
if (ptmp == NULL)
{
ret = -2;
return ret;
}
memset(ptmp, 0, (len + 1) * sizeof(char));
//
strcpy(ptmp, str1);


//初始化循環環境
p1 = ptmp + 1;
p2 = ptmp;
for (i = 0; i<len && (*p1 != NULL); i++)
{
if (isalpha(*p1) && isspace(*p2))
{
*p1 = *p1 - 32;
}


//打造循環條件
p2 = p1;
p1++;
}
*str2 = ptmp; //str2是實參的地址 間接賦值修改實參,讓實參指向新分配的內存空間
return ret;
}




int GetString_Adv_Free1(char *str2)
{
if (str2 == NULL)
{
return -1;
}
free(str2);
str2 = NULL; //垃圾語句
}


int GetString_Adv_Free2(char **                  str2)
{
char *tmp = NULL;
if (str2 == NULL)
{
return -2;
}
tmp = *str2;
if (tmp != NULL)
{
free(tmp);
*str2 = NULL;
}
}


void main()
{
int ret = 0;
const char *str1 = "     i am student, you are teacher   ";
//char buf[1024] = {0};
char *pbuf = NULL;
ret = GetString_Adv(str1 /*in*/, &pbuf /*in*/);
if (ret != 0)
{
printf("func GetString() err:%d \n", ret);
return ret;
}
printf("pbuf:%s \n", pbuf);


GetString_Adv_Free2(&pbuf);

system("pause");
}

發佈了61 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章