#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;
}
利用指针编写操作字符串的函数
于 2023-11-27 21:30:41 首次发布