怎么偷人家的微信支付密码怎么设置密码

纯干货,c语言中重要的字符串处理函数的实现
纯干货,c语言中重要的字符串处理函数的实现
C语言字符串库函数的实现,不仅是在学习c语言应该重点掌握的内容,更是计算机专业笔试题常考的题目。说起来是很简单,可是一旦实现,就会漏洞百出。今天小编带着大家,来看一些常用的字符串函数的实现。1.字符串拷贝函数strcpy、strncpy:strcpystrncpy2.查找字符串s中首次出现字符c的位置strchr:strchr3.字符串拼接strcat、strncat:strcat、strncat4.字符串比较函数strcmpstrcmp每天进步一点点,每条消化一点点。如果文章对你现在所有有帮助,点个赞吧。如果你有更好的想法,欢迎一起交流。
本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。
百家号 最近更新:
简介: 通过自身的魅力影响别人来注重时尚是一
作者最新文章您还可以使用以下方式登录
当前位置:&>&&>&&>& > 实现常用字符串处理函数(不调用库函数)
c语言字符串库函数 实现常用字符串处理函数(不调用库函数)
描述:C语言中对于字符串类型并未定义,但存在许多有关字符串的库函数。例如:strstr(在原串中匹配子串)strcpy(将原串内容拷贝到目标串中),strncpy(原串内容拷贝到目标串---可控拷贝数), strcmp(比较两个字符串的内容),strcat(字符串的追加)等等,我们可以自己编写程序实现以上功能的函数,而不调用库函数。可以对照库函数进行学习,提高自身的编程能力。1、模拟strcpy函数(复制字符串)&#include&stdio.h&#include&assert.h&#include&string.h&#include&stdlib.h&char * my_strcpy(char *dest, const char *src){
assert(dest);//判断指针有效性
assert(src);
char *ret =
while (*dest++ = *src++)}int main(){
char arr[] = &hello world!&;
char src[20];
printf(&%s\n&,my_strcpy(src, arr));
system(&pause&);
return 0;}&&2、模拟实现strncpy函数(字符串复制-----可控复制字节数量)&#include&stdio.h&#include&stdlib.h&#include&assert.h&#include&string.h&char *my_strncpy(char *dest, const char *src, size_t count){
assert(dest);
assert(src);
char *ret =
while (count--)//count为要复制的字节数
*dest++ = *src++;
*dest = '\0';//字符串最后要加上'\0'}int main(){
char arr[] = &abcdef&;
char str[10];
my_strncpy(str, arr, 4);
printf(&%s\n&, str);
system(&pause&);
return 0;}&3、模拟strcmp函数(比较两个字符/字符串大小)&#include&stdio.h&#include&assert.h&#include&stdlib.h&int my_strcmp(const char *dest, const char *src){
assert(dest);
assert(dest);
int ret = 0;
while( (*(unsigned char*)dest == *(unsigned char*)src) && *dest)//注意此处需要强制类型转换,转换成无符号的char型,否则会出错
if (*(unsigned char*)dest == '\0')
ret = 0;//*dest为0时,表示比较完了,两个字符串相等,返回0
ret = *(unsigned char*)dest - *(unsigned char*)//两个字符串不等返回两个字符串的差(强制转换类型)}int main(){
char arr[] = &abcde&;
char src[] = &adcde&;
var = my_strcmp(arr, src);
printf(&%d\n&, var);
system(&pause&);
return 0;}&&4、模拟实现strncmp函数(字符串比较------可控比较字节数量)&#include&stdio.h&#include&stdlib.h&#include&assert.h&#include&string.h&int my_strncmp(const char *str1, const char *str2,size_t count){
assert(str1);
assert(str2);
while (count--)
if (*(unsigned char*)str1 == *(unsigned char*)str2)//注意此处需要强制类型转换,转换成无符号的char型
str1++, str2++;
if (count == 0)//count=0表示比较完成,两个字符串相等
ret = *(unsigned char*)str1 - *(unsigned char*)str2;//注意此处需要强制类型转换}int main(){
char arr1[] = &cdabctr&;
char arr2[] = &cdabfe&;
int len = sizeof(arr1) / sizeof(arr1[0]);
printf(&%d\n&, my_strncmp(arr1, arr2, len));
system(&pause&);
return 0;}&&5、模拟strcat函数(追加/合并字符串)&#include&stdio.h&#include&assert.h&#include&string.h&#include&stdlib.h&char * my_strcat(char *dest, const char *src){
assert(dest);
assert(src);
char *ret =
while (*ret)//数组ret自加,直到'\0'停止
while (*ret++ = *src++)//src第一个元素替换'\0',其余元素追加到ret中
return (dest);}int main(){
char arr[30] = &hello&;
char src[] = & to world!&;
printf(&%s\n&,my_strcat(arr, src));
system(&pause&);
return 0;}&6、模拟实现strncat函数(字符串追加-------可控追加字节数量)&#define _CRT_SECURE_NO_WARNINGS//使用scanf时需要加在头文件(VS2013中)#include&stdio.h&#include&assert.h&#include&string.h&#include&stdlib.h&char *my_strncat(char *dest,char *src,int count){
assert(dest);
assert(src);
char *ret =
while (*dest)
//数组dest自加,直到'\0'停止
while (count--)
//src第一个元素替换'\0',其余元素追加到dest中
*dest++ = *src++;
*dest = '\0';
//字符串后加上'\0'}int main(){
char arr[30] = &hello&;
//注意此处定义数组大小要充分大,可以存放两个数组
char str[] = & to world!&;
printf(&请输入追加长度&&);
scanf(&%d&, &len);
my_strncat(arr,str,len);
printf(&%s\n&, arr);
system(&pause&);
return 0;}&&7、模拟实现strstr函数(判断一个字符串是不是另一个字符串的子字符串)&#include&stdio.h&#include&stdlib.h&#include&string.h&#include&assert.h&char *my_strstr(const char *str1,const char *str2){
assert(str1);
assert(str2);
char *p = (char *)str1;
if (*str2=='\0')//如果str2为空,返回str1
return((char *)str1);
while (*p)
char *p1 =
char *p2 = (char *)str2;
while (*p2 && *p1 && (*p1 == *p2))//注意p1,p2为'\0'时也要停止循环
if (*p2 == '\0')//成功匹配p2中每一个字符,返回p(子字符串开始处)
p++;//p1和p2匹配没成功,p1指向下一个字符,重新与p2进行匹配
return NULL;}int main(){
char arr[20] = &abccdefgh&;
char str[20] = &cdefg&;
char *ret=my_strstr(arr, str);
printf(&%s\n&, ret);
system(&pause&);
return 0;}&&上述程序运行结果为:cdefgh8、模拟实现memset函数(内存赋值或数据重置-----可控赋值字节数量)&#include&stdio.h&#include&stdlib.h&#include&assert.h&//memset作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法void *my_memset(void *dest, int c, size_t count){
assert(dest);
char *p = (char *)
while (count--)
}}int main(){
char arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };//memset是按字节赋值
int len = sizeof(arr) / sizeof(arr[0]);
my_memset(arr, 0, len);
for (i = 0; i & i++)
printf(&%d &,arr[i]);
system(&pause&);
return 0;}&&9、模拟实现memcmp函数(内存中的内容比较大小-----可控比较字节数量)&#include&stdio.h&#include&assert.h&#include&stdlib.h&int my_memcmp(const void *p1, const void *p2, size_t count){
assert(p1);
assert(p2);
int ret = 0;
unsigned char *dest = (unsigned char *)p1;
unsigned char *src = (unsigned char *)p2;
while (count--)
if (*(unsigned char *)dest == *(unsigned char *)src)
if (count == 0)
ret = *(unsigned char *)dest - *(unsigned char *);}int my_memcmp(const void *s1,const void *s2,size_t count)
int res = 0;
const unsigned char *p1 =(const unsigned char *)s1;//注意是unsigned char *
const unsigned char *p2 =(const unsigned char *)s2;
for(p1 ,p2;count & 0;p1++,p2++,count--)
if((res =*p1 - *p2) != 0)
//不相当则结束比较
} int main(){
char arr[10] = &abcdefg&;//memset是按字节进行比较的
char str[10] = &abcdfd&;
int len = sizeof(arr) / sizeof(arr[0]);
printf(&%d\n&, my_memcmp(arr, str, len));
system(&pause&);
return 0;&&就爱阅读网友整理上传,为您提供最全的知识大全,期待您的分享,转载请注明出处。
欢迎转载:
推荐:    扫二维码下载作业帮
2亿+学生的选择
下载作业帮安装包
扫二维码下载作业帮
2亿+学生的选择
C语言常用的函数有哪些?比如sqrt 等,只要告诉形式和作用,急用,明天考,
扫二维码下载作业帮
2亿+学生的选择
一、格式化输入输出函数格式:在Turbo C中格式字符串的一般形式为: [标志][输出最小宽度][.精度][长度]类型 其中方括号[]中的项为可选项.各项的意义介绍如下:1.类型类型字符用以表示输出数据的类型,其格式符和意义下表所示:表示输出类型的格式字符       格式字符意义d                 以十进制形式输出带符号整数(正数不输出符号)o                 以八进制形式输出无符号整数(不输出前缀O)x                 以十六进制形式输出无符号整数(不输出前缀OX)u                 以十进制形式输出无符号整数f                 以小数形式输出单、双精度实数e                 以指数形式输出单、双精度实数g                 以%f%e中较短的输出宽度输出单、双精度实数c                 输出单个字符s                 输出字符串2.标志标志字符为-、+、#、空格四种,其意义下表所示: 标志格式字符      标 志 意 义-          结果左对齐,右边填空格+          输出符号(正号或负号)空格输出值为正时冠以空格,为负时冠以负号#          对c,s,d,u类无影响;对o类, 在输出时加前缀o         对x类,在输出时加前缀0x;对e,g,f 类当结果有小数时才给出小数点3.输出最小宽度用十进制整数来表示输出的最少位数. 若实际位数多于定义的宽度,则按实际位数输出, 若实际位数少于定义的宽度则补以空格或0.4.精度精度格式符以“.”开头,后跟十进制整数.本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符, 则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分.5.长度长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出.二、字符处理函数字符输出:putchar(ch)字符输入:getchar()三、字符串处理:字符串输出:puts(char *)字符串输入:gets(char *)测试字符串长度:strlen(char *)字符串复制函数:strcpy(char *,char *)字符串比较:strcmp(char *str1,char *str2) [返回值:return str1-str2]字符串连接:strcat(char *,char *)四、常用转换函数"math.h"double atof(char *x)int atoi(char *X)五、常用字符处理函数"ctype.h"int isalpha(int x)int islower(int x)int isupper(int x)int isdigit(int x)int toupper(int x)int tolower(int x)int toascii(int x)六、随机数"stdlib.h"void randomize() /*对随机数发生器进行初始化*/int random(int num) /*随机数发生函数*/
为您推荐:
其他类似问题
扫描下载二维码2463人阅读
C语言函数库(8)
C中字符串操作函数
strtok函数
char *strtok(char *s, const char *delim);
函数说明:strtok()用来将字符串分割成一个个判断。参数s指向与分割的字符串,参数delim则为分割字符串,当strtok在参数s的字符串中发现到参数delim的分割字符时则会将该字符改为\0字符。在第一次调用时,strtok()必须基于参数s字符串,往后的调用则将参数设置为NULL。每次调用成功则返回下一个分割后的字符串指针。
返回值:返回一个分割后的字符串指针,如果已无从分割则返回NULL。
strstr函数
char *strstr(char *str, char *substr);
函数说明:strstr()用来检索子串在字符串中首次出现的位置。参数str为要检索的字符串,substr为要检索的子串。
返回值:返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回NULL。
strspn函数
size_t strspn(const char *str, const char *accept);
函数说明:strspn()从参数str字符串的开头计算连续的字符,而这些字符都完全是accept所指字符串中的字符。即若strspn()返回的数值为n,则代表字符串str开头连续有n个字符都属于字符串accept内的字符。
返回值:返回字符串str开头连续包含字符串accept内的字符数目。故如果str所包含的字符都属于accept,那么返回str长度,如果str的第一个字符不属于accept,返回0。
strrchr函数
char *strrchr(const char *str, int c);
函数说明:strrchr()用于查找某个字符在字符串中最后一次出现的位置。参数str为要查找的字符串,c为要查找的字符。
返回值:如果找到就返回该字符最后一次出现的位置,否则返回NULL。
注意:字符串str的结束标志NUL也会被纳入检索范围,所以str的租后一个字符也可以被定位。
strpbrk函数
char *strpbrk(char *s1, char *s2);
函数说明:strpbrk()用于检索两个字符串中首个相同的字符的位置。从s1的第一个字符向后检索,直到’\0’,如果当前字符存在于s2中,那么返回当前字符的地址,并停止检索。
返回值:如果s1、s2含有相同的字符,那么返回指向s1中第一个相同字符的指针,否则返回NULL。
注意:strpbrk()不会对结束符’\0’进行检索。
strncpy函数
char *strncpy(char *dest, const char *src, size_t n);
函数说明:strncpy()用来复制字符串的前n个字符。dest为目标字符串指针,src为源字符串指针。它会将字符串str前n个字符拷贝到字符串dest,不想strcpy(),strncpy()不会像dest追加结束标记’\0’,这会引发很多不合常理的问题。
返回值:返回字符串dest。
注意:src和dest所指的内存区域不能重叠,且dest必须有足够的空间放置n个字符。
strncat函数
char *strncat(char *dest, const char *src, size_t n);
函数说明:strncat()用于将n个字符追加到字符串的结尾。它将会从字符串src的开头拷贝n个字符到dest字符串尾部,dest要有足够的空间来容纳要拷贝的字符串。如果n大于字符串src的长度,那么仅将src全部追加到dest尾部。它会将dest字符串最后的’\0’覆盖掉,字符追加完成后,在追加’\0’。
返回值:返回字符串dest。
strncasecmp函数
int strncasecmp(const char *s1, const char *s2, size_t n);
函数说明:strncasecmp()用来比较参数s1和s2字符串前n个字符,比较时会自动忽略大小写的差异。
返回值:若参数s1和s2字符串相同,则返回0;s1若大于s2,则返回大于0的值;s1若小于s2,则返回小于0的值。
strlen函数
unsigned int strlen(char *s);
函数说明:strlen()用于计算字符串的长度,其中不包括结束字符’\0’。
返回值:返回字符串s的字符数。
strdup函数
char *strdup(const char *s);
函数说明:strdup()会先用malloc()配置与参数s字符串相同的空间大小,然后将参数s字符串的内容复制到该内存地址,然后把该地址返回。该地址最后可以利用free()来释放。
返回值:返回一字符串指针,该指针指向复制后的新字符串地址。若返回NULL,表示内存不足。
strchr函数
char *strchr(const char *str, int c);
函数说明:strchr()将会找出str字符串中第一次出现的字符c的地址,然后将该地址返回。
返回值:如果找到指定的字符则返回该字符所在地址,否则返回NULL。
注意:字符串str的结束标志NUL也会被纳入检索范围,所以str的组后一个字符也可以被定位。
strcspn函数
int strcspn(char *str, char *accept);
函数说明:strcspn()从字符串str的开头计算连续的字符,而这些字符都完全不在字符串accept中。简单地说,若strcspn()返回的数值为n,则代表字符串str开头连续有n个字符都不包含字符串accept中的字符。
返回值:返回字符串str开头连续不含字符串accept内的字符数目。
注意:如果str中的字符都没有在accept中出现,那么将返回str的长度;检索的字符时区分大小写的。
strcpy函数
char *strcpy(char *dest, const char *src);
函数说明:strcpy()会将参数src字符串拷贝至参数dest所指的地址。
返回值:返回参数dest的字符串起始地址。
注意:如果参数dest所指的内存空间不够大,可能会造成缓冲溢出(buffer overflow)的错误情况。
strcoll函数
int strcoll(const char *str1, const char *str2)
函数说明:strcoll()函数根据环境变量LC_COLLATE所指定的文字排列次序来比较字符串。其中参数str1,str2是要进行比较的两个字符串。默认情况下,LC_COLLATE为“POSIX”或“C”,strcoll()和strcmp()一样根据ASCII比较字符串大小。对于设置了LC_COLLATE语言环境的情况下,则根据LC_COLLATE设置的语言排序方式进行比较。如汉子会根据拼音进行比较。
返回值:若字符串str1和str2相同则返回0。若str1大于str2则返回大于0的值,否则返回小于0的值。
strcmp函数
int strcmp(const char *s1, const char *s2);
函数说明:strcmp()用来比较字符串(区分大小写)。s1和s2为需要比较的两个字符串。字符串大小的比较是以ASCII码表上的顺序来决定的,此顺序亦为字符的值。strcmp()首先将s1第一个字符串减去s2第一个字符值,若差值为0,则再继续比较下个字符,若差值不为0,则将差值返回。
返回值:若参数s1和s2相同,则返回0;若s1大于s2,则返回大于0的值;若s1小于s2,则返回小于0的值。
注意:strcmp()以二进制的方式进行比较,不会考虑多字节或宽字节字符;如果考虑到本地化的需求,需使用strcoll()函数。
strcat函数
char *strcat(char *dest, const char *src);
函数说明:strcat()用于将参数src字符串复制到参数dest所指的字符串尾部,dest最后的结束字符NULL会被覆盖掉,并在连接后的字符串的尾部再增加一个NULL。
返回值:返回dest字符串起始地址。
注意:dest与src所指的内存空间不能重叠,且dest要有足够的空间来容纳要复制的字符串。
strcasecmp函数
int strcasecmp(const char *s1, const char *s2);
函数说明:strcasecmp()用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异。
返回值:若参数s1和s2字符串相同则返回0;若s1长度大于s2长度则返回大于0的值;若s1长度小于s2长度则返回小于0的值。
rindex函数
char *rindex(const char *s, int c);
函数说明:rindex()用来找出参数s字符串中最后一个出现的参数c地址,然后将该字符出现的地址返回。字符串结束字符NULL也被视为字符串一部分。
返回值:如果找到指定的字符则返回该字符所在的地址,否则返回0。
char *index(const char *s, int c);
函数说明:index()用来找出参数s字符串中第一个出现的参数c地址,然后将该字符出现的地址返回。字符串结束字符(NULL)也视为字符串一部分。
返回值:如果找到指定的字符则返回该字符所在地址,否则返回0。
toupper函数
int toupper(int c)
函数说明:若参数c为小写字母则将该对应的大写字母返回。
返回值:返回转换后的大写字母,若不须转换则将参数c值返回。
tolower函数
int tolower(int c);
函数说明:若参数c为大写字母则将该对应的小写字母返回。
返回值:返回转换后的小写字母,若不须转换则将参数c值返回。
toascii函数
int toascii(int c);
函数说明:toascii()会将参数c转换成7位的unsigned char值,第八位则会被清除,此字符即会被转换成ASCII码字符。
返回值:将转换成功的ASCII码字符值返回。
strtoul函数
unsigned long strtoul(const char *str, char **endptr, int base);
函数说明:strtoul()会将参数str字符串根据参数base来转换为无符号的长整型数(unsigned long)。参数base范围从2至36,或0。参数base代表str采用的进制方式,如base值为10则采用10进制,若base值为16则采用16禁止数等。它会扫描参数str字符串,跳过前面的空白字符(如空格,tab缩进,可以用isspace()函数来检测),直到遇上数字或正负号才开始做转换,再遇到非数字或字符串结束时(’\0’)结束转换,并将结果返回。
返回值:返回转换后的无符号长整形数;如果不能转换或者str为空字符串,那么返回0;如果转换得到的值超出unsigned long int所能表示的范围,函数将返回ULONG_MAX(在limits.h中定义),并将errno的值设置为ERANGE。
注意:1)当base的值为0时,默认采用10进制转换,但如果遇到‘0x’或‘0X’前置字符这幅使用16进制转换,遇到‘0’前置字符则会使用8进制转换;2)若endptr不为NULL,则会将遇到的不同符合条件而终止的字符指针有endptr传回;若endptr为NULL,则表示该参数无效,或不使用该参数。
strtol函数
long int strtol(const char *str, char **endptr, int base);
函数说明:strtol()会将参数str字符串根据参数base来转换成长整型数(long)。参数base范围从2至36,或0。参数base代表str采用的禁止方式,如base值为10则采用10进制,若base值为16,则采用16进制等。它会扫描参数str字符串,跳出前面的空白字符(如空格,tab缩进等,可以通过isspace()函数来检测),直到遇到数字或正负符号才开始做转换,在遇到非数字或字符串结果是‘\0’结束转换,并将结果返回。
返回值:返回转换后的长整型数;如果不能转换或者str为空字符串,那么返回0(0L);如果转换得到的值超出long int所能表示的范围,函数返回LONG_MAX或LONG_MIN(在limits.h头文件中定义),并将errno的值设置为ERANGE。
注意:1)当base的值为0时,默认采用10进制转换,但如果遇到‘0x’或‘0X’前置字符这幅使用16进制转换,遇到‘0’前置字符则会使用8进制转换;2)若endptr不为NULL,则会将遇到的不同符合条件而终止的字符指针有endptr传回;若endptr为NULL,则表示该参数无效,或不使用该参数。
strtod函数
double strtod(const char *str, char **endptr);
函数说明:strtod()函数会扫描参数str字符串,跳过前面的空白字符(如空格,tab缩进,可以通过isspace()函数来检测),直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束时‘\0’才结束转换,并将结果返回。参数str字符串可包含正负号,小数点或E(e)来表示指数部分。如123.456或123e-2。若endptr不为NULL,则会将遇到的不符合条件而终止的字符串由endptr传回;若endptr为NULL,则表示该参数无效,或不使用该参数。
返回值:返回转换后的浮点型数;若不能转换或字符串为空,则返回0.0。
char *gcvt(double number, size_t ndigits, char *buf);
函数说明:gcvt()用来将参数number转换成ASCII码字符串,参数ndigits表示显示的位数。gcvt()与ecvt()和fcvt()不同的地方在于,gcvt()所转换后的字符串包含小数点或正负符号。若转换成功,转换后的字符串会放在参数buf指针所指的空间。
返回值:返回一字符串指针,此地址为buf指针。
long atol(const char *str);
函数说明:atol会扫描参数str字符串,跳过前面的空白字符(如空格,tab缩进等,可以isspace()函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时‘\0’才结束转换,并将结果返回。
返回值:返回转换后的长整型数long;如果str不能转换成long或者str为空字符串,那么将返回0。
int atoi(const char *str);
函数说明:atoi()会扫描参数str字符串,跳过前面的空白字符(如空格,tab缩进,可以通过isspace()函数来检测),直到遇上数字或正负符号才开始做转换,而遇到非数字或字符结束时‘\0’才结束转换,并将结果返回。
返回值:返回转换后的整型数;如果str不能转换为int或者str为空字符串,那么将返回0。
double atof(const char *str);
函数说明:atof()用于将字符串转换为双精度浮点数(double)。它会扫描参数str字符串,跳过前面的空白字符串(如空格,tab缩进等,可以通过isspace()函数来检测),直到遇上数字或正负符号才开始转换,而再遇到非数字或字符串结束时‘\0’才结束转换,并将结果返回。参数str字符串可包含正负号、小数或E(e)来表示指数部分,如123.456或123e-2。
返回值:返回转换后的浮点数;如果字符串str不能被转换为double,那么返回0.0。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:198639次
积分:4487
积分:4487
排名:第6343名
原创:251篇
评论:27条
(1)(5)(3)(4)(5)(1)(6)(3)(5)(17)(12)(34)(40)(49)(63)(8)(1)(3)
本专栏主要是关于Linux的一些基本知识等。电脑编程技巧与维护;利用C语言库函数实现常见的字符串操作;刘凤霞;(辽宁省北票市职教中心,北票122100);摘要:本文利用C语言的库函数编写了四个对字符串处;FamiliarOperationsofStri;LIUFengxia;(LiaoningBeiPiaoVocation;Abstract:Thistheorydescr;treatedwithfou
电脑编程技巧与维护
利用C语言库函数实现常见的字符串操作
(辽宁省北票市职教中心,北票122100)
摘要:本文利用C语言的库函数编写了四个对字符串处理的简单程序,包括输出字符串中的一部分、删除字符串首(尾)部的空格和按指定宽度输出字符串等,为C语言程序设计的初学者扩展了学习思路,同时也可加强对相关库函数的应用和理解,培养其编程技巧。关键词:C语言;函数;字符串操作
FamiliarOperationsofStringsAchievedbyUsingBase-FunctionofCLanguage
LIUFengxia
(LiaoningBeiPiaoVocationalEducationCenter,Beipiao122100)
Abstract:ThistheorydescribedthathowtousetheBase-functionofClanguagetowriteasimpleprogramwhichwas
treatedwithfourdoublestrings.Itincludethatpartofstringsoutput,blankofthehomeorendofstringsdelete,stringsout-putaccordingtoFixedwidthandsoon.Itwashelpfulforlearnertodeveloptheirideaofstudying.Meanwhile,itcanrein-forcetheapplicationsandpalpabilityofinterrelatedbase-functionandalsotraintheskillofmakingprograms.Keywords:CLFOperationofStrings现在的C语言教材一般只介绍如strcpy()、strlen()和strcat()等关于字符串操作的函数,学生掌握的知识比较抽象、片面和孤立,他们不知道如何灵活地综合运用这些知识去解决实际问题。教学实践中笔者发现学生存在“听得懂,不会编”的现象,针对适合中职校学生编程题少的问题,从让学生“学会编写程序”的角度,注重问题求解的方法,编写了下面利用C语言库函数实现常见的字符串操作的程序,以期达到培养利用基础知识解决实际问题能力的目的。
为了说明方便,下列各程序对其数据进行初始化处理。当然,可以在运行程序时接收输入的各元素的值,也可以定义数组来存放数据值,但这不是本文重点阐述的问题,涉及的知识点又比较简单,这里就不举例了。
掉多余部分。第二次调用printf()函数时,是将源字符串的最后9个字符输出出来,其操作过程是:
(1)用strlen()函数计算出str字符串的长度,即strlen(str);
(2)strlen(str)-9是将str的长度减去9(9是将要输出的字符数),得到str中剩余的字符数;
(3)将strlen(str)-9和str的首地址相加,得到指向str中倒数第9个字符的指针;即str+(strlen(str)-9)。这个指针就是printf()函数的第二个参数。
(4)通过指定参数“%9.9s”,输出源字符串的最后9个字符。
2删除字符串尾部的空格
C语言没有提供可删去字符串尾部空格的标准库函数,但
1输出字符串
这个操作可以使用库函数printf()来实现,程序如下:#include&stdio.h&
char*str=&Thisisastring.&;
printf(&字符串的前7个字符是:'%7.7s'\n&,str);/*用printf()函数输出前7个字符*/
printf(&字符串的后9个字符是:'%9.9s'\n&,str+(strlen(str)-9));
/*用printf()函数输出后9个字符*/
}程序运行结果如下所示:字符串的前7个字符是:'Thisis'字符串的后9个字符是:'astring.'
在上例中,第一次调用printf()函数时,因为源串的长度
是,编写完成这样功能的函数还是比较方便的。
#include&stdio.h&#include&string.h&char*rtrim(char*str){
intn=strlen(str)-1;/*获得字符串的最大下标*/while(n&0){
if(*(str+n)!='')/*如果当前字符不是空格*/{
*(str+n+1)='\0';/*将第一个空格字符替换为'\0'*/}elsen--;}
大于7个字符,通过指定参数“%7.7s”来实现将源字符串截本文收稿日期:日
SOFTWAREDEVELOPMENTANDDESIGN
char*str=&Thisstringhas4spaces□□□□&;/*定义一个尾部有4个空格的字符串*/printf(&原字符串为:'%s'\n&,str);
/*显示调用rtrim()函数前原字符串的情况*/printf(&原串字符个数为:%d.\n&,strlen(str));
rtrim(str);/*调用删除尾部空格的函数rtrim()*/printf(&删除尾部空格后,新字符串为:'%s'\n&,str);/*显示调用rtrim()函数后新字符串的情况*/printf(&新串字符个数为:%d.\n&,strlen(str));}
程序运行结果为:
原字符串为:'Thisstringhas4spaces□□□□'原串字符个数为:28
删除尾部空格后,新字符串为:'Thisstringhas4spaces'新串字符个数为:24
rtrim()函数是用户自定义的一个函数,它的功能是:删去字符串尾部的空格。其算法是:从字符串中位于最后的那个字符(当然也就是最后一个空格)开始往回检查每个字符,当遇到第一个不是空格的字符时,就将该字符后面的第一个字符串的结束标志),这样就相当于删空格字符替换为'\0'(去了字符串尾部的所有空格。
软件开发与设计
4删去字符串头部的空格
C语言也没有提供可删去字符串头部空格的标准库函数,
下面就来编写一个这样的程序。
#include&stdio.h&
#include&string.h&char*rtrim(char*str)
/*与前面所述的删除字符串尾部空格的函数算法相同,但采用for循环*/
for(i=strlen(str)-l;i&=0;i--)if(*(str+i)!='□'){
*(str+i+1)='\0';}returnstr;}
char*ltrim(char*str){
strrev(str);/*调用库函数strrevO翻转字符串*/rtrim(str);/*调用rtrimO删除尾部空格*/
strrev(str);/*调用库函数strrevO再次翻转字符串*/}
char*str=&□□□□Thisstringhas4leadingspaces.&;/*定义一个前部有4个空格的字符串*/printf(&原字符串为:'%s'\n&,str);
printf(&其字符个数为:%d.\n&,strlen(str));ltrim(str);/*调用ltrim()删除前部空格*/
printf(&删除头部空格后,新字符串为:'%s'\n&,str);printf(&其新串字符个数为:%d.\n&,strlen(str));}
程序的运行结果如下:
原字符串为:'□□□□Thisstringhas4leadingspaces.'其字符个数为:37
删除头部空格后,新字符串为:'Thisstringhas4leadingspaces.'
其新串字符个数为:33
在上例中,ltrim()函数可删去字符串头部的空格,其过程是:首先调用库函数strrev()将源字符串首尾倒置(使字符串的头部空格转移到尾部),然后调用rtrim()函数删去字符串尾部的空格,再调用strrev()函数将字符串再首尾倒置回来,其结果就是删去源字符串的头部空格。作者简介
刘凤霞,(1964-),黑龙江省肇州县,北票市职教中心,大学本科,讲师。
3将字符串按指定长度输出
如果要按表格形式而不是一个挨一个无格式输出一组字
符串,就需要将字符串输出成指定的长度,利用printf()函数可以完成这一任务。
#include&stdio.h&
char*data[25]={
&姓名&,&C语言&,&VB&,&网页设计&,&Photo-shop&,
&张颖&,&90.5&,&70.0&,&65.0&,&64.0&,&王娟&,&66.0&,&95.0&,&78.5&,&79.0&,&赵林&,&89.0&,&89.0&,&89.0&,&87.0&,&刘闯&,&85.0&,&74.5&,&78.0&,&87.0&};main(){
for(i=0,i&25;i++){
if(i%5)==0)printf(&\n&);
printf(&%-10.10s&,data[i]);}}
在本例中,用下述语句来输出这些数据:printf(&%-10.10s&,data[i]);其中参数&%-10.10s&指示printf()函数按10个字符的长度输出一个字符串。在第一个10的前面加上减号(-)后,printf()函数就会使字符串左对齐,并在字符串的尾部加入空格,以使其长度达到10个字符。上例的输出结果类似于一张表格,如下所示:
姓名张颖王娟
C语言90.566.0
VB70.095.0
网页设计65.078.5
Photoshop64.079.0
三亿文库包含各类专业文献、应用写作文书、中学教育、专业论文、文学作品欣赏、各类资格考试、行业资料、生活休闲娱乐、71利用C语言库函数实现常见的字符串操作等内容。 
 Linux下常用C语言字符串操作函数_IT/计算机_专业资料。C语言字符串操作经常要用...利用C语言库函数实现常见... 2页 1下载券 C语言字符串操作函数 10页 1下载...  C语言字符串函数实现源码汇总_计算机软件及应用_IT/计算机_专业资料。C语言 ...c语言常见字符串函数源码... 2页 免费
C语言字符串处理函数归总... 32页 ...  更方便简洁, 本系统设计了一个字符串函数 包来实现常用的字符和字符串的处理。...并要求用 C 语言的文件操作语句将 以上所有结果保存在文件 XX.out。 【输入/...  利用C语言库函数实现常见... 2页 1下载券
用C实现字符串库函数 4页 1下载券
C语言字符串处理的库函数... 10页 1下载券
C语言之数字转化为字符串.....  不使用库函数实现两个字符串的连接_计算机软件及应用_IT/计算机_专业资料。C语言,连接,字符,字符串,数组 不使用库函数实现两个字符串的连接 如 a[20]={“abcd...  C语言常用的库函数_计算机软件及应用_IT/计算机_...的库函数,但也有一些是某些 C 编译系统未曾实现的...字符函数 在使用字符函数时,应该在源文件中使用预...  C语言字符串操作函数_计算机软件及应用_IT/计算机_...s 字符串, 往后的调 用则将参数 s 设置成 NULL...常用字符串处理函数C语言... 4页 5下载券
C语言...  单片机C语言(C51)的常用库函数_电子/电路_工程科技...在使用 时,必须在源程序的开始处使用预处理命令#...用于检查形参字符是否为英文字母,其函数原型如下: ...  C语言的常用库函数使用方法分析及用途_计算机软件及...协处理器使用 100H-16FH 保留 170H 171H 172H ...()在指定位置显示一字符串的函数 原形:void far ...

我要回帖

更多关于 怎么破解别人微信密码 的文章

 

随机推荐