当前位置: 首页> 健康> 美食 > 武汉大学人民医院首义院区_内网建站教程_郑州百度推广代理公司_企业网络营销策划

武汉大学人民医院首义院区_内网建站教程_郑州百度推广代理公司_企业网络营销策划

时间:2025/7/13 22:20:17来源:https://blog.csdn.net/qq_50093188/article/details/145851769 浏览次数:0次
武汉大学人民医院首义院区_内网建站教程_郑州百度推广代理公司_企业网络营销策划

目录

前言

一、字符数组

二、字符串

三、遍历字符数组

1、下标遍历字符数组

 2、指针变量遍历

四、字符数组与字符指针对字符串处理的区别

​五、 字符串长度

仿真

六、字符串复制

strcpy_s安全函数

strncpy与strncpy_s 

仿真

七、字符串拼接

仿真

八、字符串比较

仿真

总结


前言

        C语言中的字符串是以字符数组的形式存储在内存中的,以'\0'(空字符)结尾。这意味着在C语言中,字符串实际上是一个字符数组,以空字符作为字符串的结束标志。在C语言中,字符串的处理是非常重要的,因为它们在许多程序中占据着重要的地位。

        C语言中提供了许多用于处理字符串的函数,例如strcpy、strcat、strlen等,这些函数可以帮助我们对字符串进行复制、拼接、获取长度等操作。在处理字符串时,我们需要格外小心,确保不会造成内存溢出或者指针错误等问题。

        另外,C语言中还有一些字符处理函数,如isalpha、isdigit等,可以用来判断字符的类型。这些函数在处理字符串时也经常被用到。


一、字符数组

字符数组不一定是字符串

char arr[6] = {'A',66,'\n','\141','\x62','\0'};
printf("%s",arr);

二、字符串

从第一个地址开始 第一个\0之前的所有字符称为有效字符串

char arr[7] = {'A',66,'\0','\n','\141','\x62','\0'};
printf("%s",arr);

 

char str[] = "hello";
printf("%s", str);

 

char str[] = "he\0llo";
printf("%s", str);

 

三、遍历字符数组

1、下标遍历字符数组

void prints(char str[])
{for (int i=0;str[i]!='\0';i++){printf("%c",str[i]);}printf("\n");
}

 2、指针变量遍历

void prints(char str[])
{char* p = str;while (*p != '\0'){printf("%c", *p);p++;}printf("\n");
}

四、字符数组与字符指针对字符串处理的区别

字符数组拥有独立的存储空间所以可以修改,而字符指针指向的字符串常量在项目启动时创建在常量区,不可改。

	/*用debug调试观察变量信息 总结:字符数组与字符指针对字符串处理的区别*/char str1[] ="Hello";const char *p1 = "Hello";const char *p2="Hello";str1[0]='h';//p1[0]='h';//p2[0]='h';

 

 printf("%c\n", "how are you"[5]);//rprintf("%s\n", "how are you" + 6);//e youprintf("%d\n", "how are you");//代表其所在常量区的 首地址

五、 字符串长度

#include <stdio.h>
#include <string.h>
size_t my_strlen(const char* str);
int main ()
{/* 如何得到字符串的长度 */char str1[] ="Hello";char *p1 = "Hello";char *p2="Hello";printf("数组长度:%d 字符串长度:%d\n", sizeof(str1), strlen(str1));return 0;
}

仿真

#include <stdio.h>
#include <string.h>
size_t my_strlen(const char* str);
int main ()
{/* 如何得到字符串的长度 */char str1[] ="Hello";char *p1 = "Hello";char *p2="Hello";printf("数组长度:%d 字符串长度:%d\n", sizeof(str1), strlen(str1));printf("数组长度:%d 字符串长度:%d\n", sizeof(str1), my_strlen(str1));return 0;
}size_t my_strlen(const char* str)
{//方法一int count = 0;const char* p = str;while (*str!='\0'){count++;p++;}return count;//方法二const char* p = str;while (*p!='\0'){p++;}//内存地址特点:连续的 从小到大的return p - str;//地址的间隔,即长度
}

六、字符串复制

#include <stdio.h>
#include <string.h>int main  ()
{/*字符串复制函数*/ char * p="12345";char a[20];/*strcpy*/strcpy(a,p);printf("%s\n", strcpy(a, "happy"));return 0;
}

strcpy_s安全函数

#include <stdio.h>
#include <string.h>
int main  ()
{char * p="12345";char a[20];/*strcpy_s*/ //_s安全函数 属于C11的标准strcpy_s(a,20,"new year");return 0;
}

 

strncpy与strncpy_s 

仿真

 方法1:

#include <stdio.h>
#include <string.h>
char* my_strcpy(char* dest, const char* src);
int main  ()
{/*字符串复制函数*/ char * p="12345";char a[20];/*仿真字符串复制函数 strcpy   */my_strcpy(a,"happy");printf("%s\n",a);return 0;
}char* my_strcpy(char* dest, const char* src)
{//方法1:char* q = dest;const char* p = src;while (*p!='\0'){*q = *p;p++;q++;}*q = '\0';return dest;
}

 方法2:

char* my_strcpy(char* dest, const char* src)
{memcpy(dest, src, strlen(src)+1);}

 

七、字符串拼接

#include <stdio.h>
#include <string.h>int main ()
{/*字符串拼接函数*/ char a[50]="hello ";char *p="hi ";/*strcat*/strcat(a,p);/*strcat_s*/strcat_s(a, 50, p);/*strncat*/strncat(a, "ABCDE", 4);/*strncat_s*/strncat_s(a, 50,"ABCDE", 4);return 0;
}

仿真

 法1:不推荐

#include <stdio.h>
#include <string.h>
char* my_strcat(char* dest, const char* src);
int main ()
{/*字符串拼接函数*/ char a[50]="hello ";char *p="hi ";/*仿真字符串拼接函数 strcat  strcat_s */my_strcat(a,"abcd");return 0;
}char* my_strcat(char* dest, const char* src)
{//找\0char* p = dest;const char* q = src;while (*p!='\0'){p++;}//2 从\0开始复制src内容while (q != '\0'){*p = *q;p++;q++;}*p = '\0';return dest;
}

 法2:

char* my_strcat(char* dest, const char* src)
{//法2:char* p = dest + strlen(dest);//指向\0的位置//2 从\0开始复制src内容strcpy(dest,src);return dest;
}

八、字符串比较

#include <stdio.h>
#include <string.h>
#include <math.h>int main ()
{/*字符串比较函数*/ /*strcmp*/       //'a' 97  'b' 98printf("%d\n", strcmp("apple", "banana"));//'a' 97  'B' 66printf("%d\n", strcmp("apple", "Banana"));printf("%d\n", strcmp("apple", "apple"));//忽略大小写的比较 但 stricmp不是标准库函数 仅限于微软printf("%d\n", stricmp("APPLE", "apple"));return 0;}

仿真

#include <stdio.h>
#include <string.h>
#include <math.h>
int my_strcmp(const char* str1, const char* str2);int main ()
{/*字符串比较函数*/ /*strcmp*/       //'a' 97  'b' 98printf("%d\n", my_strcmp("apple", "banana"));//'a' 97  'B' 66printf("%d\n", my_strcmp("apple", "Banana"));printf("%d\n", my_strcmp("apple", "apple"));//忽略大小写的比较 但 stricmp不是标准库函数 仅限于微软printf("%d\n", stricmp("APPLE", "apple"));/*仿真字符串比较函数 strcmp */return 0;}int my_strcmp(const char* str1, const char* str2){const char* p = str1;const char* q = str2;while (*p==*q&&*p!='\0'){p++;q++;}int cha = *p - *q;return cha==0?0:cha/abs(cha);}

总结

        总的来说,C语言中的字符串处理需要细心和谨慎,同时也需要深入理解字符数组、指针等概念。掌握好字符串处理的技巧对于编写高效、健壮的C程序是非常重要的。

关键字:武汉大学人民医院首义院区_内网建站教程_郑州百度推广代理公司_企业网络营销策划

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: