zoukankan      html  css  js  c++  java
  • C语言学习笔记之 字符操作函数

    字符操作函数

    头文件

    #include <string.h>
    

    strcpy字符拷贝

    #include <string.h>
    
    char * strcpy(char * dest,const char * source);
    功能:将source所指的字符串拷贝到dest所指的内存空间中,
          ''也会被拷贝
    参数:
        dest:目的字符串首地址
        source:源字符首地址
    返回:
        成功:dest字符串首地址
        失败:NULL
    

    注意!如果dest所指的内存不够大,则可能造成缓冲溢出
    例:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
    	char s[20] = "";
    	strcpy(s,"Helloworld!");
    	puts(s);
    
    	return 0;
    }
    
    Hello
    

    strncpy只拷贝前n个字符

    #include <string.h>
    
    char * strncpy(char * dest,const char * source,size_t n);
    功能:将source所指字符串的前n个字符拷贝到dest所指的内存空间中,
          ''也会被拷贝
    参数:
        dest:目的字符串首地址
        source:源字符首地址
        n:拷贝字符个数
    返回:
        成功:dest字符串首地址
        失败:NULL
    

    是否结束拷贝是由''决定的
    例:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
    	char s1[20] = "";
    	char s2[20] = "";
    	strncpy(s1,"Helloworld!",7);
    	puts(s1);
    
    	strncpy(s2,"Hello world!",7);
    	puts(s2);
    
    	return 0;
    }
    
    Hello
    Hello w
    

    strcat字符串拼接

    #include <string.h>
    
    char * strcat(char * dest,const char * source);
    功能:将source所指的字符串连接到dest字符串后面,''也会追加
    参数:
        dest:目的字符串首地址
        source:源字符首地址
    返回:
        成功:dest字符串首地址
        失败:NULL
    

    例:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
    	char s1[20] = "Hello";
    	char s2[20] = " world";
    	strcat(s1,s2);
    	puts(s1);
    
    	return 0;
    }
    
    Hello world
    

    strncat

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
    	char s1[20] = "Hello";
    	char s2[20] = " world";
    	strncat(s1,s2,3);
    	puts(s1);
    
    	return 0;
    }
    
    Hello wo
    

    strcmp比较字符串大小

    #include <string.h>
    
    char * strcmp(const char *str1,const char *str2);
    功能:比较str1和str2的ASCII字符大小
    参数:
        str1:字符串1首地址
        str2:字符串2首地址
    返回:
        相等:0
        大于:>0
        小于:<0
        不同操作系统会有差异
    

    例:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
    	char s1[20] = "Hello";
    	char s2[20] = "world";
    	printf("%d
    %d
    ",strcmp(s1,"Hello"),strcmp(s1,s2));
    
    	return 0;
    }
    
    0
    -1
    

    strncmp

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
    	char s1[20] = "Hello";
    	char s2[20] = "world";
    	printf("%d
    %d
    ",strcmp(s1,"Hello"),strncmp(s1,s2,1));
    
    	return 0;
    }
    
    0
    -47
    

    组包解包

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
    	char s1[20];
    	// 将字符串组包(格式化)后保存到s1中
    	sprintf(s1,"Hello%d,%s",123,"abcd");
    	int a;
    	char b[5];
    	// 将字符串解包后分别保存到变量中
    	sscanf(s1,"Hello%d,%s",&a,&b);
    	printf("%d
    %s
    ",a,b);
    
    	return 0;
    }
    
    123
    abcd
    

    strchr字符查找

    #include <string.h>
    
    char * strchr(const char *str,int val);
    功能:在str中寻找val第一次出现的位置
    参数:
        str:被查找的字符串首地址
        val:匹配字符
    返回:
        成功:val第一次出现的地址
        失败:NULL
    

    例:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
    	printf("请输入一个字符串:");
    	char s[32];
    	scanf("%s",s);
    	getchar();
    	printf("请输入要查找的字符:");
    	char val;
    	val = getchar();
    	getchar();
    	char *ret = NULL;
    	ret = strchr(s,val);
    	if (ret == NULL)
    	{
    		printf("未找到%c
    ",val);
    	}
    	else
    	{
    		printf("地址:%p
    位置:%d
    ",ret,(ret-s));
    	}
    
    	return 0;
    }
    
    PS D:> ./main   
    请输入一个字符串:abcdf
    请输入要查找的字符:f
    地址:0060FE7C
    位置:4
    
    PS D:> ./main
    请输入一个字符串:ac
    请输入要查找的字符:d
    未找到d
    

    例2:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
    	char s[32] = "aebecede";
    	char *buf = &s[0];
    	char *ret = NULL;
    	while (ret = strchr(buf,'e'))
    	{
    		printf("地址:%#d
    ",ret);
    		*ret = '@';
    		buf = ret + 1;
    	}
    	printf("%s
    ",s);
    
    	return 0;
    }
    
    地址:6356601
    地址:6356603
    地址:6356605
    地址:6356607
    a@b@c@d@
    

    strstr字符串查找

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
    	printf("请输入一个字符串:");
    	char s[32];
    	scanf("%s",s);
    	getchar();
    	printf("请输入要查找的字符串:");
    	char val[32];
    	scanf("%s",val);
    	getchar();
    	char *ret = NULL;
    	ret = strstr(s,val);
    	if (ret == NULL)
    	{
    		printf("未找到%c
    ",val);
    	}
    	else
    	{
    		printf("地址:%p
    位置:%d
    ",ret,(ret-s));
    	}
    
    	return 0;
    }
    
    请输入一个字符串:abHelloc
    请输入要查找的字符串:Hello
    地址:0060FE7E
    位置:2
    
  • 相关阅读:
    HOJ 2139 Spiderman's workout(动态规划)
    FZU 2107 Hua Rong Dao(dfs)
    Java 第十一届 蓝桥杯 省模拟赛 计算机存储中有多少字节
    Java 第十一届 蓝桥杯 省模拟赛 计算机存储中有多少字节
    Java 第十一届 蓝桥杯 省模拟赛 计算机存储中有多少字节
    Java 第十一届 蓝桥杯 省模拟赛 合法括号序列
    Java 第十一届 蓝桥杯 省模拟赛 合法括号序列
    Java 第十一届 蓝桥杯 省模拟赛 合法括号序列
    Java 第十一届 蓝桥杯 省模拟赛 无向连通图最少包含多少条边
    Java 第十一届 蓝桥杯 省模拟赛 无向连通图最少包含多少条边
  • 原文地址:https://www.cnblogs.com/zhujiangyu/p/13693905.html
Copyright © 2011-2022 走看看