说实话前面的对整数的指向指针的排序真没看出有什么意思,但是这个对字符串的指向指针的排序方法让我察觉到了其意义所在,字符串一般都需要大量的存储空间来保存,如果直接对其进行排序,必然涉及到大量的字符串移动,这是非常浪费资源的,而通过指向字符串的指针来排序,排序的对象仅仅是一个存储着指针值的数组而已,差不多就是对整数排序的开销而达到了发现字符串大小顺序的效果,而无需对原来的字符串数组作任何移动与调整。
#include<stdio.h>
#include<string.h>
/*
通过对指向字符串数组的指针所指的字符串进行比较
对ptr指针数组进行排序,完成后只需要根据ptr数组来输出字符串即为有序
*/
void sort(char **p, int n)
{
int i,j;
char *t;
for(i=0; i<n; i++)
{
for(j=i+1; j<n; j++)
{
if(strcmp(p[i],p[j])>0)
{
t = p[i];
p[i] = p[j];
p[j] = t;
}
}
}
}
void main()
{
int i;
int n=5;
char *ptr[5];
char a[5][100] = {0};
printf("input %d strings:\n", n);
for(i=0; i<n; i++)
{
ptr[i] = a[i];
scanf("%s", ptr[i]);
}
printf("before sort:\n");
for(i=0; i<n; i++)
{
printf("%s\n", a[i]);
}
//对指向字符串数组的指针数组进行排序
sort(ptr, n);
printf("after sort(*ptr[]):\n");
for(i=0; i<n; i++)
{
printf("%s\n", ptr[i]);
}
printf("after sort(a[]):\n");
for(i=0; i<n; i++)
{
printf("%s\n", a[i]);
}
}
分享到:
相关推荐
### 使用指针数组对字符串排序的原理 在C语言中,字符串实际上是一系列字符的数组,通常以空字符'\0'作为结束标志。当处理多个字符串时,可以使用指针数组来存储每个字符串的首地址。指针数组中的每个元素都是一个...
根据给定的信息,本文将详细解释四种不同的方法来实现字符串排序。这些方法分别采用不同的数据结构作为函数参数,包括二维数组、指向一维数组的指针、`string`数组以及指针数组。每种方法都有其特点和适用场景,下面...
通过定义一个指针数组,初始化各个元素指向字符串,然后对指针数组进行排序,可以实现字符串的字母顺序输出。这种技巧在处理动态数据集或需要高效排序时非常实用,是C语言中高级指针应用的一个经典实例。
首先,定义一个指向字符串首字符的指针,然后逐渐向字符串末尾移动,逐个输出字符,直到到达字符串结束标记'\0'。 以下是一个简单的逆序输出字符串的示例代码: ```c #include #include void reverse(char *str...
同时,指针数组还可以方便地进行字符串的排序、查找等操作,例如`SortString`函数就是一个例子,它接受一个字符串指针数组和数量,通过比较字符串并交换指针来对字符串进行排序。 总的来说,理解和熟练运用指针数组...
本文通过一个示例代码,详细介绍了如何使用C语言实现字符串排序。 **算法原理:** 该示例采用了经典的冒泡排序算法对字符串数组进行排序。冒泡排序的基本思想是重复地走访过要排序的数列,一次比较两个元素,如果...
根据给定的信息,本文将详细解释“按ASCII大小的字符串排序”这一问题,涉及的知识点主要包括:文件操作、字符串处理以及排序算法。 ### 文件操作 在C语言中,文件操作通常包括打开、读取、写入和关闭等基本操作。...
指针数组可以用于字符串排序、矩阵运算和动态存储管理等领域。例如,下面是一个字符串排序的示例: ```c void sort(char *name[], int n){ char *temp; int i, j, k; for (i = 0; i < n-1; i++) { k = i; for ...
本篇文章将通过一个具体的示例来详细介绍如何在C++中实现字符串排序。此示例代码涵盖了字符串输入、比较以及排序等关键步骤,并使用了基本的C++语法和标准库函数。 #### 二、代码解析 ##### 1. 包含头文件 ```cpp ...
在这个问题中,我们可以看到一个简单的C语言程序实现,它使用冒泡排序对字符串中的字符进行排序,并通过覆盖的方式删除重复的字符。 首先,我们来详细解释冒泡排序。冒泡排序是一种基础的排序算法,它的基本思想是...
- 字符串排序示例中,通过使用`strcmp`函数比较字符串大小,`strcpy`函数复制字符串,并自定义`swap`函数来交换字符串的位置。 ### 实验任务二:矩阵转置 **目标**:编写一个函数,实现3x3矩阵的转置。 **示例...
5. index:在字符串中查找指定字符的第一个出现位置,返回一个指向该字符的指针,如果没有找到则返回NULL。 6. memccpy:与memcpy类似,但它会继续复制直到找到特定字符或达到指定长度,然后返回指向该字符后的地址...
2. **字符串排序**: 通过自定义的 `range` 函数对字符串数组进行排序,确保字符串按照字典序排列。 3. **文件写入**: 将排序后的字符串逐行写入新文件 `b.txt`。 4. **内存释放**: 使用 `free` 释放动态分配的内存...
双指针法的核心思想是利用两个或多个指针在数组或字符串中的移动来实现特定的功能,例如查找、排序或变换数据。在这个"反转字符串"的面试题中,我们将深入探讨如何使用双指针来实现这一任务。 首先,我们需要了解...
这段代码展示了如何使用指针数组对字符串进行排序。通过比较字符串并交换指针数组中的元素,实现了字符串的升序排列。 总的来说,理解和掌握C语言中的指针和字符数组是学习C语言的基础,它们在数据处理、函数调用...
- **功能**:`strrchr()` 函数返回指向字符串中最后一个出现的指定字符的指针。 - **语法**: ```c char *strrchr(const char *str, int c); ``` - **参数**: - `str`: 字符串。 - `c`: 要查找的字符。 - **...
指针与数组区别,实验与指导-数组指针字符串 在 C++ 编程中,指针和数组是两个基本概念。指针是一种变量,它存储了另一个变量的内存地址,而数组是一组相同类型的变量的集合。 understanding the difference ...
#### 字符串排序函数 ```cpp void range(char (*a)[80], int n) { // ... } ``` 这个函数实现了字符串的排序功能。通过两层循环比较字符串的大小,如果当前字符串比下一个字符串大,则交换它们的位置。 #### 总结 ...
4. **字符串的常用函数**:C语言中的`<string.h>`库提供了许多字符串处理函数,如`strlen()`计算字符串长度,`strcpy()`和`strncpy()`复制字符串,`strcmp()`比较字符串,`strtok()`分割字符串等。 在`线性表上机....