字符函数:字符函数的头文件是ctype.h
islower 是用来判断参数部分的c是否为小写字母
int islower(int c);
通过函数值来说明是否是小写字母,如果是小写字母就返回非零的整数,如果不是小写字母,则返回0;
练习:写一个代码,判断这个字符串是否有小写字母,如果有将小写字母,转变成大写字母
注:小写字母的ASCII值-32==大写字母的ASCII值
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main()
{
char a[] = "I am a Student.";
int sz = strlen(a);
int i = 0;
for (i = 0; i < sz; i++)
{
if ((islower(a[i])) != 0)
{
a[i] = a[i] - 32;
}
}
printf("%s\n", a);
return 0;
}
输出结果:
字符串函数转换
int tplower(int c);//将参数c传进去的大写字母变成小写字母
int toupper(int c);//将参数c传进去的小写字母变成大写字母
练习:写一个代码,判断这个字符串是否有小写字母,如果有将小写字母,转变成大写字母
注:这里我们不是用ASCII值来转变大小写,而是使用字符串函数转换来,转变大小写字符
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main()
{
char a[] = "I am a Student.";
int sz = strlen(a);
int i = 0;
for (i = 0; i < sz; i++)
{
if ((islower(a[i])) != 0)
{
a[i]=toupper(a[i]);
}
}
printf("%s\n", a);
return 0;
}
输出结果:
strlen 函数
求\0之前的字符串的长度
size_t作为strlen的返回值,%zd
strlen的头文件#include<string.h>
strlen的使用:
#include<stdio.h>
#include<string.h>
int main()
{
char a[] = "abcdef";
int ret = strlen(a);
printf("a这个数组的字符串长度是:%d\n",ret);
return 0;
}
输出结果:
我们来写一个代码实现一下,strlen碰到\0就会停下
#include<stdio.h>
#include<string.h>
int main()
{
char a[] = "abcd\0ef";
int ret = strlen(a);
printf("a这个数组的字符串长度是:%d\n",ret);
return 0;
}
输出结果:
我们来进行strlen的模拟实现(有三种方法)
//计数器的方法
//计数器
#include<stdio.h>
size_t my_strlen(const char* arr)
{
int count = 0;
while (*arr != '\0')
{
*arr++;
count++;
}
return count;
}
int main()
{
char arr[] = "abcdef";
size_t len = my_strlen(arr);
printf("%zd\n", len);
return 0;
}
//指针-指针的方法
//指针-指针
#include<stdio.h>
size_t my_strlen(const char* arr)
{
const char* start = arr;
while (*arr != '\0')
{
arr++;
}
return arr - start;
}
int main()
{
char arr[] = "abcdef";
size_t len = my_strlen(arr);
printf("%zd\n", len);
return 0;
}
//递归的方式
//递归的方式
#include<stdio.h>
size_t my_strlen(const char* arr)
{
if (*arr != '\0')
return 1 + my_strlen(arr+1);
else
return 0;
}
int main()
{
char arr[] = "abcdef";
size_t len = my_strlen(arr);
printf("%zd\n", len);
return 0;
}
strcpy函数
char* strrcpy(char* destination,const char* source)
目标地址 源头地址
注:源头的字符串中必须包含\0,没有\0strcpy不能结束运行
目标空间需要足够大,能够放下源字符串
strcpy的使用
#include<stdio.h>
#include<string.h>
int main()
{
char a[] = "acdef";
char b[20] = { 0 };
strcpy(b, a);
printf("a=%s\n", a);
printf("b=%s\n", b);
return 0;
}
输出结果:
strcpy 的模拟实现
//strcpy的模拟实现
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* dest,const char* src)
{
assert(dest && src);
//dest 是目标空间
char* ret = dest;
//while(*dest++=*src++)//拷贝过去字符后,判断表达式的值
// 当\0拷贝过去后,判断为假并且停下来
//{ ;}
while (*src != '\0')
{
*dest = *src;
dest++;
src++;
}
*dest = *src;//处理'\0'
return ret;//为了实现链式访问,
//strcpy函数返回的是目标空间的起始地址
}
int main()
{
char a1[] = "abcdef";
char a2[10] = "xxxxxxxx";
char* pstr = my_strcpy(a2, a1);
printf("a2=%s\n", a2);
printf("a1=%s\n", a1);
printf("pstr=%s\n", pstr);
return 0;
}
输出结果:
标签:字符,arr,return,函数,int,char,字符串,include,strlen From: https://blog.csdn.net/2301_78189441/article/details/143047100