输入四个英文句子,按照首字母的顺序排序后输出四个句子。
1.排序时不分区大小写)
2.若存在两个相同的首字母,则按照第二个字母的顺序排序,如果第二个字母顺序相同,则按照第三个字母顺序排序……
【strcmp即可直接实现字符串的比较,但是不能实现“不区分大小写”的比较】
“what a beautiful flower”
“Hello world”
“how are you”
“nice to meet you”
运行截图
pubfunc.h
#ifndef _PUBFUNC_H
#define _PUBFUNC_H
#include<stdio.h>
#define _in_
#define _out_
#define MAXSIZE 256
//功能:将单个英文字符转化为大写 非英文字符不变
//参数:ch 需要转换的字符
//返回:转换后的字符
char _to_upper(char _ch);
//功能:将字符串中英文字符转化为大写 非英文字符不变
//参数:_str 需要转换的字符串
//返回:转换后的字符串
char* to_upper(char* _in_ _str);
//功能:将单个英文字符转化为小写 非英文字符不变
//参数:ch 需要转换的字符
//返回:转换后的字符
char _to_lower(char _ch);
//功能:将字符串中英文字符转化为小写 非英文字符不变
//参数:_str 需要转换的字符串
//返回:转换后的字符串
char* to_lower(char* _in_ _str);
//功能:比较字符串_str1和字符串_str2的大小 依据ASCII码大小比较字符串对应顺序单个字符的大小 若首字母相等则比较第二个依次类推
//参数:_str1 需要比较的字符串1
//参数:_str2 需要比较的字符串2
//返回:0-_str1=_str2 <0-_str1<_str2 >0-_str1>_str2
int _strcmp(const char* _in_ _str1, const char* _in_ _str2);
//功能:将字符串初始化
//参数:_dest 需要初始化的字符串
//参数:_ch 初始化的字符
//参数:sizeof_str1 初始化的长度
//返回:初始化后字符串
void* _memset(char* _in_ _out_ _dest, char _in_ _ch, int sizeof_dest);
//功能:将字符串_sorc复制到_dest
//参数:_dest 目的地的字符串
//参数:_sorc 被复制的字符串
//返回:复制后字符串_dest
char* _strcpy(char* _in_ _out_ _dest, const char* _in_ _sorc);
//功能:将多个字符串数组排序
//参数:_array 需要排序的二维数组指针
//参数:sizeof_array 需要排序的字符串的个数
//返回:0-成功 -1-失败
int sort_array(char** _in_ _out_ _array, int sizeof_array);
#endif // _PUBFUNC_H
pubfunc.cpp
#include "pubfunc.h"
char _to_upper(char _ch)
{
if (_ch >= 'a' && _ch <= 'z')
{
_ch = _ch - 32;
}
return _ch;
}
char* to_upper(char* _in_ _str)
{
if (NULL == _str)
{
return NULL;
}
char* p = _str;
while (*p) *p++ = _to_upper(*p);
return _str;
}
char _to_lower(char _ch)
{
if (_ch >= 'A' && _ch <= 'Z')
{
_ch = _ch + 32;
}
return _ch;
}
char* to_lower(char* _in_ _str)
{
if (NULL == _str)
{
return NULL;
}
char* p = _str;
while (*p) *p++ = _to_lower(*p);
return _str;
}
int _strcmp(const char* _in_ _str1, const char* _in_ _str2)
{
const unsigned char *s1 = (const unsigned char *) p1;
const unsigned char *s2 = (const unsigned char *) p2;
unsigned char c1, c2;
do
{
c1 = (unsigned char) *s1++;
c2 = (unsigned char) *s2++;
if (c1 == '\0')
return c1 - c2;
}
while (c1 == c2);
return c1 - c2;
}
void* _memset(char* _in_ _out_ _dest, char _in_ _ch, int sizeof_dest)
{
if (NULL == _dest)
{
return NULL;
}
char* p = _dest;
int i;
for (i = 0; i< sizeof_dest-1; i++)
{
*p++ = _ch;
}
*p = '\0';
return _dest;
}
char* _strcpy(char* _in_ _out_ _dest, const char* _in_ _sorc)
{
if (NULL == _dest || NULL == _sorc)
{
return NULL;
}
char* p = _dest;
char* q = (char*)_sorc;
while (*q)
{
*p++ = *q++;
}
*p = '\0';
return _dest;
}
int sort_array(char** _in_ _out_ _array, int sizeof_array)
{
//以指针排序
char** p = _array;
int len = sizeof_array;
//简单的采用冒牌排序
char temp[MAXSIZE] = { 0 };
int i, j;
for (i = 0; i < len - 1; i++) /* 外循环为排序趟数,len个数进行len-1趟 */
{
for (j = 0; j < len - 1 - i; j++)
{ /* 内循环为每趟比较的次数,第i趟比较len-i次 */
if (_strcmp(*(p + j), *(p + j + 1)) > 0)
{ /* 相邻元素比较,若逆序则交换(升序为左大于右,降序反之) */
_memset(temp, 0x00, sizeof(temp));
_strcpy(temp, *(p + j));
_memset(*(p + j), 0x00, MAXSIZE);
_strcpy(*(p + j), *(p + j + 1));
_memset(*(p + j + 1), 0x00, MAXSIZE);
_strcpy(*(p + j + 1), temp);
}
}
}
// //以下是以数组下标排序
// char** p = _array;
// int len = sizeof_array;
// //简单的采用冒牌排序
// char temp[MAXSIZE] = { 0 };
// int i, j;
// for (i = 0; i < len - 1; i++) /* 外循环为排序趟数,len个数进行len-1趟 */
// {
// for (j = 0; j < len - 1 - i; j++)
// { /* 内循环为每趟比较的次数,第i趟比较len-i次 */
// if (_strcmp(p[j], p[j + 1]) > 0)
// { /* 相邻元素比较,若逆序则交换(升序为左大于右,降序反之) */
// memset(temp, 0x00, sizeof(temp));
// strcpy(temp, p[j]);
// strcpy(p[j], p[j + 1]);
// strcpy(p[j + 1], temp);
// }
// }
// }
return 0;
}
main.cpp
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pubfunc.h"
int main(int args, char* argv[])
{
char test1[MAXSIZE] = "what a beautiful flower";
char test2[MAXSIZE] = "Hello world";
char test3[MAXSIZE] = "how are you";
char test4[MAXSIZE] = "nice to meet you";
char *test[] = { test1, test2, test3, test4 };
printf("排序前:\n");
char** q = test;
printf("%s\n", (*(q + 0)));
printf("%s\n", (*(q + 1)));
printf("%s\n", (*(q + 2)));
printf("%s\n", (*(q + 3)));
int ret = sort_array((char**)test, 4);
if (0 != ret)
{
printf("\n排序失败!\n");
}
printf("\n排序后:\n");
char** k = (char**)test;
printf("%s\n", k[0]);
printf("%s\n", k[1]);
printf("%s\n", k[2]);
printf("%s\n", k[3]);
return 0;
}