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

#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;
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值