(C语言)字符串比较函数,指针数组与数组指针

问题描述:

写一个函数,用于比较两个字符串的比较(string_compare).

程序分析:

(1)主要思想:传入两个字符串后,比较这两个字符串中的每个元素,如果第一次比较就不相等,就不要让它进入到下面的比较中。这样一来,将它返回一个相减的值(即:两数组中开始不相等的那两个元素相减,返回值(int类型),是ASCII码值相减)。进入比较的过程中时,相等就返回0;其他情况都返回那个相减的值。

(2)主要方式:定义指针数组,并对其初始化。然后照上面的思想,进行代码的实现。

代码如下:

/***指针数组
(1)int *a[10] 是一个指针数组--->是一个数组(每个数组中的元素都是int*类型)
(2)int (*a)[10] 是一个数组指针--->指向一个数组(十个int类型的数组)
 注意:*,[],()的优先级依次递增。
下面使用了指针数组的例子,至于数组指针。。**/

#include<stdio.h>
#include<assert.h>

int string_compare(const char *str1,const char *str2)
{
	assert(str1);  //ASSERT( f )
	assert(str2);
/*在Debug模式下,每次运行到这里后会计算括号中的表达式,
如果表达式为0,则中断执行,弹出一个警告框,用户可
选择“继续”,“重试”,“忽略”在Release模式下,这
句语句不会被编译进代码。 ASSERT一般用于程序内部确认参
数的正确性,即调用内部函数的时候,要由调用者保证参数的正
确,而被调用函数内部,就可以通过ASSERT来检查参数是否满足要求。*/

	while(*str1 ==  *str2 )	//判断两个数组中的元素是否相等
	{
		str1++;			  //使两个指针指向下一位;继续比较
		str2++;

		if(*str1 == '\0')  //双方比较到'\0'处,都相等
		{
			return 0;	   //返回0,表示二字符串相等
		}
	}
	return *str1-*str2;	 //若不相等,返回一个正值或负值
}
int main()
{

	char *ch[2];
	ch[0] = "ab";	//对这个指针数组的元素初始化,使其指向这个字符串首元素的首地址
	ch[1] = "a";	//同上

	printf("%d\n",string_compare(ch[0],ch[1]));	//调用这个函数
	return 0;
}
时间: 2024-09-28 22:04:34

(C语言)字符串比较函数,指针数组与数组指针的相关文章

[笔记]C语言字符串比较函数,复制函数和拼接函数

1.字符串比较函数有两个,分别是memcmp()和strcmp(), memcmp(const char *s,const char *d,int n) 表示字符串s和d比较前n个字符,若字符长度小于n则会越界比较,用这个函数的时候要特别小心s和d在长度及要比较的字符个数. strcmp(const char *s,const char *d) 比上个函数少一个参数n,因为这个函数是以'\0'为比较结束标记的,如果某个字符串到达'\0'的位置,则结束比较,另外注意,两个字串s和d长度必须相等才可

Swift中对C语言接口缓存的使用以及数组、字符串转为指针类型的方法

由于Swift编程语言属于上层编程语言,而Swift中由于为了低层的高性能计算接口,所以往往需要C语言中的指针类型,由此,在Swift编程语言刚诞生的时候就有了UnsafePointer与UnsafeMutablePointer类型,分别对应为const Type*类型与Type *类型. 而在Swift编程语言中,由于一般数组(Array)对象都无法直接用于C语言中含有指针类型的函数参数(比如:void*),所以往往需要将数组转为指针类型,此外也需要将数组中元素内容存放到连续的存储空间.此外,

菜鸟入门记录篇1--C语言中两种关于字符串表达的方法(数组和指针)

现需表示一个字符串“itcast”,表示方法如下所列: 方法1: char name[]="itcast";     //此时定义的是一个字符串变量,数组内包含了6个字母及‘\0’一共7个元素,储存在内存的栈里面,数组内部的字符可以随意改动: (注:内存的“栈”里面储存的是局部变量,值是可以随意更改的) name[0]='t'; printf(“%s\n”,name); 输出结果为:ttcast: 方法2: char *name="itcast";    //此时定

golang 数据一 &nbsp; (字符串、数组和数组指针)

从如下几个方面介绍GO语言的数据 1. 字符串 2. 数组 3. 切片 4. 字典 5. 结构 字符串 Go语言中的字符串是由一组不可变的字节(byte)序列组成从源码文件中看出其本身是一个复合结构 string.go  type stringStruct struct {     str unsafe.Pointer         len int } 字符串中的每个字节都是以UTF-8编码存储的Unicode字符字符串的头部指针指向字节数组的开始但是没有NULL或'\0'结尾标志. 表示方式

读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组

原文链接:C语言结构体里的成员数组和指针 复制如下: 单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如下.我觉得好多人对这段代码的理解还不够深入,所以写下了这篇文章. 为了方便你把代码copy过去编译和调试,我把代码列在下面: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h>

字符指针,字符数组,双引号的字符串的区别与联系

作者 :  陈宗权 先说说双引号的字符串,比如"chenzongquan",它是由里面咱们看到的一系列字符以及一个尾随的'\0'字符组成,存储在内存的只读存储区中.只读存储区是在整个程序运行期间都保留着的.可见的,而且其中的数据原则上是保持不变的.所以对一个双引号表示的字符串,只要你知道它的具体地址,可以在程序的任何一个函数中再次使用. 说到只读,要引一下,在16位系统中没有进行内存访问保护,所以在程序运行时实际上也可以改变只读存储区中的数据,但是在32位系统中有内存访问保护,程序运行

C语言字符串数组

1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y'};即把10个字符分别赋给str[0]到str[9]10个元素如果花括号中提供的字符个数大于数组长度,则按语法错误处理:若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 '\0' ). 2.字符数组与字符串在c语言中,将字符串作为字符数组来处理.(c++中不是)在实际应用

C语言学习笔记:19_数组-字符数组与字符串(常用字符串函数)

/* * 19_数组-字符数组与字符串.c * * Created on: 2015年7月7日 * Author: zhong */ #include <stdio.h> #include <stdlib.h> #include <string.h> /** *一:字符数组:就是存放字符的char[]数组 * 由于c语言中没有像java,C#中的String(字符串),只有存放字符 的字符型数组当字符串使用(java中的String类也是对字符数组进行封闭的). * *

C++——指针---指向数组的指针---指向字符串的指针--指向函数的指针--指针的指针--指针的引用

一.指向数组的指针 代码示例1: 1 int main() 2 { 3 int a[10]={0,2,4,6,8,10,12,14,16,18}; 4 int *p; 5 for(p=&a[0];p<&a[0]+10;p++) 6 printf("%d ",*p); 7 } 代码示例2: int a[10]={0,2,4,6,8,10,12,14,16,18}; int *p; p=a; printf("%d\n",*(a+5));//注意加括