经典算法-字符串的颠倒
最优状态下字符串的颠倒(字符串的反转)
2005-11-18 10:18:35
FROM:http://www.exuesoft.com/article/View.aspx?NewsID=116
void Reverse(char s[])
{
for(int i =0,j=strlen(s)-1;i<j; ++i,--j)
{
char c=s[i];
s[i]=s[j];
s[j]=c;
}
}
此函数原出自Kernighan和Ritchie合作的经典作品TCPL第二版
评注:此算法无论是从时间复杂度,还是从使用最小空间方面,都应该是最优了。
时间上只用了遍历字符串长度一半的时间,空间上只是创建字符串长度
一半的空间。当然我们还可以从空间上进一步减少使用。
void Reverse(char s[])
{
char c;
for(int i =0,j=strlen(s)-1;i<j; ++i,--j)
{
c=s[i];
s[i]=s[j];
s[j]=c;
}
}
我们从外部声明c,这样在整个字符串反转过程中我们就只使用了一个变量。空间使用
更小了!但是我们必须要考虑的一个问题是,当我们传递的字符串只用一个字符的时候,
上面的算法,不如第一个算法效率高,因为上面的这个函数,多创建了一个没有使用的
char对象,并且C++语言推荐:"尽可能推迟对变量声明"。所以真正我还是同意用《TCPL》
上的那种方法,在使用出定义char c=s[i]的形式!
分享到:
相关推荐
今天我们关注的练习主题是“反转字符串”,这是编程基础中的一个经典问题,它涉及到字符串处理的基本技巧和算法思维。 字符串反转通常指的是将一个给定的字符串中的字符顺序颠倒过来,例如将"hello"变为"olleh"。在...
在编程领域,字符串逆序是一个常见的基础...字符串逆序是编程中的一个基础概念,而在C语言中通过指针交换字符位置的方式实现该功能,可以加深对指针和字符串操作的理解,为进一步学习数据结构和算法打下坚实的基础。
字符串逆序指的是将字符串中的字符顺序颠倒过来,例如将"hello"变成"olleh"。在C语言中,实现字符串逆序的方法多种多样,下面将详细介绍三种主要的实现方式。 首先,循环法是实现字符串逆序的一种基本方法。通过...
该示例采用了经典的冒泡排序算法对字符串数组进行排序。冒泡排序的基本思想是重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复进行的,直到没有再需要交换,...
根据提供的文件信息,我们可以提取出与全国计算机等级考试C语言上机考试相关的知识点,分别涉及数组操作、函数应用、字符串处理以及结构体的使用。以下是对这些知识点的详细阐述: 1. 数组操作 文件中展示了数组的...
字符串倒置是C语言字符串处理中的一个经典问题,其核心思想是将一个给定的字符串中的字符顺序颠倒。在C语言中,由于字符串是以字符数组的形式存在的,我们通常可以通过交换数组两端的字符来实现倒置,直到达到数组...
字符串的概念及操作算法 - **字符串长度计算** - 示例代码: ```c int stringLength(const char* str) { int length = 0; while (str[length] != '\0') { length++; } return length; } ``` - **子串...
在计算机编程中,字符串处理是至关重要的部分,特别是在C语言中。本文将详细讲解几个标准库中的字符串函数,这些函数广泛应用于各种编程任务,如比较、复制、连接以及查找字符串。 首先,我们来看两个用于比较字符...
逆序字符串就是将字符串中的字符顺序颠倒,例如,"hello"变成"olleh"。递归是解决这个问题的一种优雅方式。递归的基本思想是将问题分解为更小的子问题,直到子问题变得足够简单可以直接求解。对于字符串逆序,我们...
在IT领域,编程语言是构建各种软件和应用的基础,而C语言作为一种经典的系统级编程语言,因其高效、灵活和简洁的特性,被广泛用于操作系统、嵌入式系统以及各种复杂算法的实现。在这个名为"C 代码 将 Atbash 替换...
在C语言中,对字符串的操作通常依赖于字符数组和相关的字符串处理函数。学生需要理解如何通过指针或数组下标来访问和操作字符串中的每个字符,进而实现单词的颠倒输出。在编程时,还需要注意单词的识别和边界处理,...
8. 将字符串s 中的字符顺序颠倒过来:编写函数reverse(),将字符串s 中的字符顺序颠倒过来。 知识点:字符串处理、递归函数 9. 删除C语言程序中的所有注释语句:编写一个程序,删除C语言程序中的所有注释语句,...
5. **颠倒整数**:需要逆序输出整数,可以使用字符串操作,或者数组存储整数的每一位,然后从后往前输出。 6. **整数排序**:这是简单的数据排序问题,可以使用冒泡排序、插入排序、选择排序等算法对输入的整数进行...
在C语言中,可以使用`itoa()`函数将整数转化为字符串,但这个函数并不在标准库中,因此在某些编译器下可能不可用。更通用的方法是使用`sprintf()`函数配合内存分配动态生成字符串。之后,我们可以从字符串末尾开始...
- **解析**:题目描述的是字符串的反转操作,即原始字符串中的字符顺序完全颠倒。 #### 题目二:循环条件判断 **题目描述**:关于循环的条件判断。 - **选项**: - A) 循环只要头指针或尾指针变化就会执行 - B) ...
【知识点详解】 ...这些知识点涵盖了C语言的基本数据结构(如数组和链表)、字符串处理、循环和条件控制、函数调用以及基本算法(如排序和查找)。掌握这些知识点对于理解和编写C语言程序至关重要。
这种方法有效地将字符串中的字符顺序颠倒。 2. 矩阵转置 矩阵转置是将矩阵的行变为列,列变为行。在C语言中,可以使用二维数组表示矩阵。代码中的`fun(int array[3][3])`函数实现了这个功能。通过两个嵌套的for...
本题要求用户以C语言编写一个程序,实现输入一串字符(包含单词),并将其翻转的功能,使得原字符串中的单词顺序颠倒,但单词内的字符顺序保持不变。例如,输入"Hello World!"翻转后应为"World! Hello"。 为实现这...
这些题目覆盖了C语言的基础语法,包括函数设计、控制结构(如`switch`和`for`循环)、基本运算(如比较和算术运算)、字符串操作、数组处理以及算法设计(如查找、判断素数等)。它们提供了实践C语言编程技能的机会...
需要注意的是,C语言中的字符串是以空字符`\0`作为结束标志,因此字符数组的长度应至少比字符串长度多1,以便容纳这个结束标志。例如,存储长度为4的字符串"abcd",字符数组应至少为5个字符长度。 4. 常用的字符...