利用指针编写操作字符串的函数

文章介绍了在C语言中实现字符串复制、长度计算、反转以及字符串连接和比较的函数,通过示例展示了如何使用这些函数处理两个输入字符串并判断其相等性。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
 size_t string_Length(const char* s)
{
	 size_t len = 0;
	 while (*s++)           //指针自增,指向下一个对象,s++,len随着自增,直到s指向null,循环停止
		 len++;
	 return len;
}
 char* StringCopy(char* st1, char* st2)
 {
	 char* t = st1;
	 while (*st1++ = *st2++)
	 {

	 }
     return t;
 }
 void Reverse_str(char* s)         //接收第一个字符的指针,也可以改为s[],s是一个指针
 {
	 int left = 0;
	 int right = string_Length(s) - 1;
	 while (left < right)
	 {
		 char z;
		 z=s[left];            //对指针s加[],像数组一样操作指针
		 s[left] = s[right];
		 s[right] = z;
		 left++;    //将字符翻转
		 right--;
		 
	 }
 }
 char* concatenateStrings(char* st1, char* st2)
 {
	
	 int i = string_Length(st1);
	 int j = string_Length(st2);
	 char* t = (char*)malloc(i + j + 1); //给两个字符串分配新内存
	 if (t == NULL)
	 {
		 printf("分配内存失败!\n");
		 return NULL;
	 }
	 t[0] = '\0';    //空字符串,往里面添加st1和st2
	 
	 int a = 0;
	 int b = 0;
	 for (a = 0; a < i ; a++)
		 {
		 t[a] = st1[a];
		 }
	 for (b = 0; b < j; b++)
	 {
		 t[a+b] = st2[b];
	 }
	 t[i + j] = '\0';
	 return 	t; //返回

 }
 int compareStrings(char* st1, char* st2) 
 {
	 while (*st1 && *st2 && (*st1 == *st2))//遍历判断字符是否相等,只有当st1,st2,都不为\0,并且相等时才会进入循环
	 {
		 st1++;             //指针自增,判断下一个字符,如果不相等则不进入循环,立即返回
		 st2++;
	 }
	 return(*st1 - *st2);            //当字符串相等时,循环结束,返回0,当字符串不相等或者有一个字符串已经遍历到\0,不进入循环,此时的st1和st2是指向第一个不相等的字符,计算ASCII码大小
 }


 
 
 
 int main()
 {
	 int i = 0;
	 int len = 0;
	 char str1[]="abcdef";
	 char str2[] = "ABCDEF";
	 printf("请输入字符串\n");
	 scanf("%s", str1);
	 
	 printf("str1: %s,str2: %s\n", str1,str2);
	 StringCopy(str1, str2);
	 len=string_Length(str1);
	 printf("str1复制:\n%s\n", str1);
	 printf("str1长度为:%d\n", len);
	 Reverse_str(str1);
	 printf("翻转后的st1是:\n%s\n", str1);
	 char *new_str=concatenateStrings(str1, str2);
	 printf("连接字符串:%s\n", new_str);
	 i = compareStrings(str1, str2);
	 if (i == 0)
	 {
		 printf("两个字符串相等\n");
	 }
	 else if (i < 0)
	 {
		 printf("字符串不相等,%s < %s", str1, str2);
	 }
	 else {
		 printf("字符串不相等,%s > %s", str1, str2);
	 }
	 return 0;
 }

### 回答1: 下面是利用指针编写字符串长度函数strlen的代码: ```c #include <stdio.h> int strlen(char *str) { int len = ; while (*str != '\') { len++; str++; } return len; } int main() { char str[100]; printf("请输入一个字符串:"); scanf("%s", str); printf("字符串的长度为:%d\n", strlen(str)); return ; } ``` 在主函数中,我们先定义了一个字符数组str,用于存储用户输入的字符串。然后调用scanf函数读入字符串。接着调用strlen函数计算字符串的长度,并将结果输出。 在strlen函数中,我们定义了一个整型变量len,用于记录字符串的长度。然后使用while循环遍历字符串,每遍历一个字符,就将len加1。最后返回len即可。 注意,在遍历字符串时,我们使用了指针指针str指向字符串的第一个字符,每遍历一个字符,就将指针向后移动一位,指向下一个字符。当指针指向字符串的结尾时,即指向'\'时,循环结束。 ### 回答2: 字符数组是字符串的常见表示形式,在C语言中,可以通过数组名字来访问整个字符串,但如果要计算字符串的长度,需要遍历整个字符数组,因此需要使用指针来遍历数组,计算出字符串的长度。 先来看一下计算字符串长度的算法,可以用循环遍历字符串的字符,直到遇到字符串尾部的'\0'字符为止,记录遍历过程中字符的个数,就是字符串的长度: ``` int strlen(char *str) { int len = 0; char *p = str; //用指针来遍历字符串 while (*p != '\0') { len++; p++; } return len; } ``` 这个函数接收一个字符数组的指针,并用指针遍历数组中的所有元素,直到遇到字符串尾部的'\0'字符。在遍历的过程中,用len变量记录字符的个数。最后返回len值,就是字符串的长度。 我们可以编写一个简单的主函数来测试一下strlen函数的实现: ``` #include <stdio.h> int strlen(char *str); int main() { char str[100]; printf("Enter a string: "); scanf("%s", str); int len = strlen(str); printf("Length of the string is %d", len); return 0; } ``` 在主函数中,首先让用户输入一个字符串,然后调用strlen函数来计算字符串的长度,最后输出字符串的长度。运行程序后,控制台会提示用户输入字符串,输入完成后,程序会输出字符串的长度。 ### 回答3: 字符串是在计算机中广泛应用的一种数据类型。在C语言中,字符串是以字符数组的形式表示的。为了编写一个函数来计算字符串的长度,我们需要利用指针字符串进行操作函数strlen的原理是遍历整个字符串,直到遇到字符串的结束符'\0'。字符串的长度就是到'\0'之前的字符个数。而指针的作用是指向字符串的首位,并配合循环语句来依次对每个位置的字符进行判断。下面是一个求字符串长度的函数strlen的代码: ```c int strlen(char *str){ int len = 0; while(*str){ len++; str++; } return len; } ``` 上面的函数中,*str表示指向字符数组的指针所指向的值。当遍历到字符串的末尾时,*str为'\0',循环语句就会停止。此时len的值即为字符串的长度。 接下来,我们可以编写一个主函数来测试函数是否正确。下面是一个示例主函数: ```c #include<stdio.h> int strlen(char *str); int main(){ char str[] = "Hello, world!"; printf("字符串的长度是:%d", strlen(str)); return 0; } ``` 在主函数中,我们首先声明了一个字符数组str,并将其初始化为"Hello, world!"。然后,我们调用函数strlen来计算字符串的长度,并将其输出到屏幕上。在这个例子中,字符串的长度是13。 总之,相信通过以上的代码解释和示例,读者们已经对如何利用指针编写字符串长度函数strlen有了更好的理解。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值