模板网站怎么做才美观杭州市建设监理协会网站
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:20
当前位置: 首页 > news >正文
模板网站怎么做才美观,杭州市建设监理协会网站,厂家招总代理,vue做的项目网站✨ 更多细节参考 cplusplus.com/reference/cstring/
使用方式#xff1a; ⭕ 求字符串长度
#x1f58c; strlen
函数原型#xff1a;
size_t strlen ( const char * str );
作用#xff1a;
获取字符串长度 ✨补充#xff1a; ⭐字符串以 \0 作为结束标志 ⭕ 求字符串长度 strlen
函数原型
size_t strlen ( const char * str );
作用
获取字符串长度 ✨补充 ⭐字符串以 \0 作为结束标志 strlen 函数返回的是在字符串中 \0 前面出现的字符个数不包含 \0 ) 。 ⭐参数指向的字符串必须要以 \0 结束。 ⭐注意函数的返回值为size_t 是无符号的 易错 strlen函数的使用
#include stdio.h
#include string.hint main ()
{char buffer[256];printf (Enter a sentence: );gets (buffer);printf (The sentence entered is %u characters long.\n,(unsigned)strlen(szInput));return 0;
}
运行结果
strlen函数模拟实现 方法一计数器
size_t my_strlen(const char* str)
{int count 0;assert(str ! NULL);while (str ! \0){count;str;}return count;
} 方法二递归
size_t my_strlen(const char str)
{if (str \0)return 0;elsereturn my_strlen(str 1) 1;
} 方法三指针-指针
size_t my_strlen(const char str)
{const char* p str;while (*str ! \0)str;return str - p;
}
⭕ 长度不受限制的字符串函数 strcpy
函数原型 char * strcpy ( char * destination, const char * source ); 函数功能 将源指向的 C 字符串复制到目标指向的数组中 函数使用
#include stdio.h
#include string.hint main ()
{char str1[]Sample string;char str2[40];char str3[40];strcpy (str2,str1);strcpy (str3,copy successful);printf (str1: %s\nstr2: %s\nstr3: %s\n,str1,str2,str3);return 0;
} ✨有源字符串必须以 \0 结束。 ✨会将源字符串中的 \0 拷贝到目标空间。 ✨目标空间必须足够大以确保能存放源字符串。 ✨目标空间必须可变。 ✨strcpy函数返回的是目标空间的起始地址 ✨strcpy函数的返回类型的设置是为了实现链式访问 模拟实现
char* my_strcpy(chardest, const char src)
{char* ret dest;while(*dest *src);return ret;
} strcat
函数原型 char * strcat ( char * destination, const char * source ); 函数功能 将源字符串的副本追加到目标字符串。目标中的终止空字符被源的第一个字符覆盖并且在目标中由两者串联形成的新字符串的末尾包含一个空字符。 目的地和来源不得重叠。 ⭐ 目标空间必须有足够的大能容纳下源字符串的内容。 ⭐ 目标空间必须可修改。 函数使用 #define _CRT_SECURE_NO_WARNINGS 1
#includestdio.h
#includestring.h
#include assert.hint main()
{char str[80];strcpy(str, these );strcat(str, strings );strcat(str, are );strcat(str, concatenated.);puts(str);return 0;
} 目的地和来源不得重叠。所以不可以自己给自己追加喔strcats,s);绝对不可以喔。♀️ 模拟实现 char* my_strcat(char* dest, char* src)
{assert(dest src);char* ret dest;//找目标空间中的\0while (*dest)dest;//拷贝while (*dest *src);return ret;
} strcmp 函数原型 int strcmp ( const char * str1, const char * str2 ); 函数功能 此函数开始比较每个字符串的第一个字符。如果它们彼此相等则继续以下对直到字符不同或达到终止空字符。 ps:此函数执行字符的二进制比较。有关考虑特定于区域设置的规则的函数请参阅 strcoll。 ✨ 返回值 第一个字符串大于第二个字符串则返回大于 0 的数字 第一个字符串等于第二个字符串则返回 0 第一个字符串小于第二个字符串则返回小于 0 的数字 函数使用 #define _CRT_SECURE_NO_WARNINGS 1
#includestdio.h
#includestring.hint main()
{char key[] apple;char buffer[80];do {printf(Guess my favorite fruit? );fflush(stdout);//刷新输出缓冲区scanf(%79s, buffer);} while (strcmp(key, buffer) ! 0);puts(Correct answer!);return 0;
} fflush(stdout);作用刷新输出缓冲区–更多欢迎进入主页查看文件系统与inode编号 有更详细的介绍 模拟实现 ✍ 代码实现 #define _CRT_SECURE_NO_WARNINGS 1
#includestdio.h
#includestring.h
#include assert.hint my_strcmp(const char* s1, const char* s2)
{assert(s1 s2);while (*s1 *s2){if (*s1 \0){return 0;//相等}s1;s2;}//不相等return *s1 - *s2;
}
int main()
{char * s1 abcde;char * s2 acbde;char * s3 abcde;char * s4 abbbbb;printf(s1 vs s2 %d\n, my_strcmp(s1, s2));printf(s1 vs s3 %d\n, my_strcmp(s1, s3));printf(s1 vs s4 %d\n, my_strcmp(s1, s4));return 0;
} 运行结果 ⭕ 长度受限制的字符串函数介绍 strncpy 函数原型 char * strncpy ( char * destination, const char * source, size_t num ); 函数功能 将源的第一个字符数复制到目标。如果在复制 num 个字符之前找到源 C 字符串的末尾由 null 字符表示则目标将填充零直到总共写入 num 个字符为止。 ⭐ 如果源长度超过 num则不会在目标末尾隐式附加空字符。因此在这种情况下不应将目标视为以空结尾的 C 字符串这样读取它会溢出。 ⭐ 目的地和来源不得重叠 函数使用 #include stdio.h
#include string.hint main ()
{char str1[] To be or not to be;char str2[40];char str3[40];/* copy to sized buffer (overflow safe): /strncpy ( str2, str1, sizeof(str2) );/ partial copy (only 5 chars): /strncpy ( str3, str2, 5 );str3[5] \0; / null character manually added /puts (str1);puts (str2);puts (str3);return 0;
} 运行结果 模拟实现 char my_strncpy(char* destination, const char* source, size_t n)
{char* cp destination;int i 0;while (*source i n){*cp *source;i;}for (int j i; j n; j){*cp 0;}return destination;
} strncat 函数原型 char * strncat ( char * destination, const char * source, size_t num ); 函数功能 将源的第一个数字字符追加到目标外加一个终止空字符。 如果源中 C 字符串的长度小于 num则仅复制终止空字符之前的内容。 函数使用 #define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include string.hint main ()
{char str1[20];char str2[20];strcpy (str1,To be );strcpy (str2,or not to be);strncat (str1, str2, 6);puts (str1);return 0;
} 运行结果 ❓ 字符串自己给自己追加如何 对于strncat函数它可以在目标字符串中追加源字符串的一部分内容但不能直接将源字符串追加到自身。 模拟实现
代码实现
#includestdio.h
#includeassert
#includestring.hchar* my_strncat(char* dest, const char* src, size_t num) {assert(dest src);char* ret dest;/*while (num–) {*dest src;}/while (*dest ! \0) {dest;}size_t i 0;for (; src ! 0 i num; i) {dest[i] src[i];}return ret;
}
int main() {char dest[20] hahaha;char src[10] yyyyyy;my_strncat(dest, src, 2);printf(%s\n, dest);return 0;
}
运行结果 strncmp 函数原型 int strncmp ( const char * str1, const char * str2, size_t num ); 函数功能 比较两个字符串的字符 将 C 字符串 str1 的字符数与 C 字符串 str2 的字符数进行比较。 此函数开始比较每个字符串的第一个字符。如果它们彼此相等则继续使用以下对直到字符不同直到达到终止的空字符或者直到两个字符串中的 num 字符匹配以先发生者为准。 ✨ 返回值 第一个字符串大于第二个字符串则返回大于 0 的数字 第一个字符串等于第二个字符串则返回 0 第一个字符串小于第二个字符串则返回小于 0 的数字 函数使用 #include stdio.h
#include string.hint main ()
{char str[][5] { R2D2 , C3PO , R2A6 };int n;puts (Looking for R2 astromech droids…);for (n0 ; n3 ; n)if (strncmp (str[n],R2xx,2) 0){printf (found %s\n,str[n]);}return 0;
} 模拟实现 int my_strncmp(const char *str1, const char *str2, int n)
{assert(str1 ! NULLstr2 ! NULL);while(n–*str1 *str2){str1;str2;}return *str1 - *str2;
}⭕ 字符串查找 strstr 函数原型 const char * strstr ( const char * str1, const char * str2 );
char * strstr (char * str1, const char * str2 ); 函数功能查找子字符串 返回指向 str1 中第一次出现的 str2 的指针如果 str2 不是 str1 的一部分则返回一个空指针。 匹配过程不包括终止空字符但它到此为止。 函数使用 #include stdio.h
#include string.hint main ()
{
//查找出错误的sample并替换为正确的char str[] This is a simple string;char * pch;pch strstr (str,simple);if (pch ! NULL)strncpy (pch,sample,6);puts (str);return 0;
} 运行结果 模拟实现 char* my_strstr(const char* str1, const char* str2)
{assert(str1 str2);const char* s1 str1;const char* s2 str2;const char* cur str1;while (*cur){s1 cur;s2 str2;while (*s1 *s2 (*s1 *s2)){s1;s2;}if (s2 \0){return (char)cur;}cur;}return NULL;//找不到
} strtok 函数原型 char * strtok ( char * str, const char * delimiters ); 函数功能 将字符串拆分为以标记分开的字符串。 此函数的一系列调用将 str 拆分为标记这些标记是由分隔符中的任何字符分隔的连续字符序列。 ⭐ 在第一次调用时该函数需要一个 C 字符串作为 str 的参数其第一个字符用作扫描令牌的起始位置。在后续调用中该函数需要一个空指针并使用最后一个令牌末尾之后的位置作为扫描的新起始位置。 ⭐ 为了确定标记的开头和结尾该函数首先从起始位置扫描分隔符中未包含的第一个字符该字符将成为标记的开头。然后从令牌的开头开始扫描分隔符中包含的第一个字符该字符将成为令牌的末尾。如果找到终止空字符扫描也会停止。 ⭐ 令牌的此结尾将自动替换为空字符并且令牌的开头由函数返回。 一旦在对 strtok 的调用中找到 str 的终止空字符则对此函数的所有后续调用以空指针作为第一个参数都将返回空指针。 ⭐找到最后一个令牌的点由要在下一次调用中使用的函数在内部保留不需要特定的库实现来避免数据争用。 函数使用 #include stdio.h
#include string.hint main ()
{char str[] - This, a sample string.;char * pch;printf (Splitting string \%s\ into tokens:\n,str);pch strtok (str, ,.-);while (pch ! NULL){printf (%s\n,pch);pch strtok (NULL, ,.-);}return 0;
} 模拟实现 char* my_strtok(char* strToken, const char* strDelimit)
{char* str1 strToken;char* temp NULL;char* str2 (char)strDelimit;static char pos NULL;if (str1 ! NULL){while (str1){str2 (char)strDelimit;while (*str2 ! \0){if ((*str1 str2)){if ((str1 1) \0)pos NULL;elsepos str1;*str1 \0;return strToken;}str2;}str1;}}else{if (pos ! NULL){str1 pos 1;temp pos 1;while (str1){str2 (char)strDelimit;while (*str2 ! \0){if ((*str1 *str2)){pos str1;*str1 \0;return temp;}str2;}str1;}pos NULL;return temp;} }return NULL;
} ⭕ 错误信息报告 strerror 函数原型 char * strerror ( int errnum ); 函数功能获得一个指向错误信息字符串的字符指针 ⭐ 解释 errnum 的值生成一个字符串其中包含描述错误条件的消息就像由库的函数设置为 errno 一样。 ⭐ 返回的指针指向静态分配的字符串程序不应修改该字符串。对此函数的进一步调用可能会覆盖其内容不需要特定的库实现来避免数据争用。 ⭐ strerror 生成的错误字符串可能特定于每个系统和库实现。 函数使用 #include stdio.h
#include string.h
#include errno.hint main ()
{FILE * pFile;pFile fopen (unexist.ent,r);if (pFile NULL)printf (Error opening file unexist.ent: %s\n,strerror(errno));return 0;
} ⭕ 内存操作函数 memcpy 函数原型 void * memcpy ( void * destination, const void * source, size_t num ); 函数功能复制内存块 将字节数的值从源指向的位置直接复制到目标指向的内存块。 ⭐ 源指针和目标指针指向的对象的基础类型与此函数无关;结果是数据的二进制副本。 ⭐ 该函数不检查源中的任何终止空字符 - 它总是准确地复制字节数。 ⭐ 为避免溢出目标和源参数指向的数组大小应至少为字节数并且不应重叠对于重叠的内存块memmove 是一种更安全的方法。 函数使用 #include stdio.h
#include string.hstruct {char name[40];int age;
} person, person_copy;int main ()
{char myname[] Pierre de Fermat;/* using memcpy to copy string: /memcpy ( person.name, myname, strlen(myname)1 );person.age 46;/ using memcpy to copy structure: /memcpy ( person_copy, person, sizeof(person) );printf (person_copy: %s, %d \n, person_copy.name, person_copy.age );return 0;
} 模拟实现 void my_memcpy(void* dest, const void* src, size_t count)
{assert(dest src);void* ret dest;while (count–){(char)dest (char)src;dest (char)dest 1;src (char)src 1;}return ret;
} memmove 函数原型 void * memmove ( void * destination, const void * source, size_t num ); 函数功能 移动内存块 将字节数的值从源指向的位置复制到目标指向的内存块。复制就像使用了中间缓冲区一样允许目标和源重叠。 ⭐ 源指针和目标指针指向的对象的基础类型与此函数无关;结果是数据的二进制副本。 ⭐ 该函数不检查源中的任何终止空字符 - 它总是准确地复制字节数。 ⭐ 为避免溢出目标参数和源参数指向的数组的大小应至少为字节数。 函数使用 #include stdio.h
#include string.hint main ()
{char str[] memmove can be very useful……;memmove (str20,str15,11);puts (str);return 0;
} 模拟实现 void* my_memmove(void* dest, const voidsrc, size_t count)
{assert(dest src);void ret dest;//1if (dest src){//前-后while (count–){(char)dest (char)(src);dest (char)dest 1;src (char)src 1;}}else{//后-前while (count–){((char)destcount) ((char)src count);}}return ret;
} memcmp 函数原型 int memcmp ( const void * ptr1, const void * ptr2, size_t num ); 函数功能比较两个内存块 将 ptr1 指向的内存块的前 num 字节数与 ptr2 指向的第一个字节数进行比较如果它们都匹配则返回零如果不匹配则返回一个不同于零的值表示哪个更大。 ✴ 请注意与 strcmp 不同该函数在找到空字符后不会停止比较。 函数使用 #include stdio.h
#include string.hint main ()
{char buffer1[] DWgaOtP12df0;char buffer2[] DWGAOTP12DF0;int n;nmemcmp ( buffer1, buffer2, sizeof(buffer1) );if (n0) printf (%s is greater than %s.\n,buffer1,buffer2);else if (n0) printf (%s is less than %s.\n,buffer1,buffer2);else printf (%s is the same as %s.\n,buffer1,buffer2);return 0;
} 模拟实现 方式一 int my_memcmp1(const void* p1, const void* p2, size_t count)//方法1
{assert(p1);assert(p2);char* dest (char)p1;char src (char*)p2;while (count (*dest *src)){count–;dest;src;}if (count 0)return 0;return *dest - src;
} 方式二 int my_memcmp2(const void p1, const void* p2, size_t count)//方法2
{assert(p1);assert(p2);int ret 0;char* dest (char)p1;char src (char*)p2;while (count (!(ret (*dest - *src)))){dest;src;count–;}if (ret 0){return 1;}else if (ret 0){return -1;}return 0;} memset 函数原型 void * memset ( void * ptr, int value, size_t num ); 函数功能填充内存块 将 ptr 指向的内存块的第一个字节数设置为指定值解释为无符号字符。 函数使用 #include stdio.h
#include string.hint main ()
{char str[] almost every programmer should know memset!;memset (str,-,6);puts (str);return 0;
}
- 上一篇: 模板网站修改教程视频常州市网站建设设计
- 下一篇: 模板网站制作怎么样网站动态图标
相关文章
-
模板网站修改教程视频常州市网站建设设计
模板网站修改教程视频常州市网站建设设计
- 技术栈
- 2026年03月21日
-
模板网站首页设计旅游景点介绍网页设计模板
模板网站首页设计旅游景点介绍网页设计模板
- 技术栈
- 2026年03月21日
-
模板网站视频丰台网站建设报价
模板网站视频丰台网站建设报价
- 技术栈
- 2026年03月21日
-
模板网站制作怎么样网站动态图标
模板网站制作怎么样网站动态图标
- 技术栈
- 2026年03月21日
-
模板网站最大缺点wordpress备案信息
模板网站最大缺点wordpress备案信息
- 技术栈
- 2026年03月21日
-
模板网站做外贸好不好网页网站设计
模板网站做外贸好不好网页网站设计
- 技术栈
- 2026年03月21日
