当前位置:   article > 正文

C语言学习(十)—字符串学习(二)_#include char* strchr(const char *str, c

#include char* strchr(const char *str, char chr); int main() {

前言

本文用来记录自己的学习过程,主要是目前学习c语言中字符串的拷贝、拼接与比较、查找、大小写转化以及字符串的分割。

字符串学习记录

在这里插入图片描述

字符串的拷贝

字符串的拷贝使用strcpy以及strncpy,strncpy的使用比strcpy多一个int数,用来指定拷贝的字符串长度

  • char strcpy(char dest,coonst char *src); 其中:dest为拷贝存放的字符串,src为被拷贝的字符
#include <stdio.h>
#include <stdlib.h>
int main()
{
	//char *strcpy(char* dest,coonst char *src);
    
   // char strDest[128]={'\0'};
     
    char *strDest;
    strDest=(char*)malloc(128);//注意需要防止内存泄漏
    memset(strDest,'\0',128);
    
    char *stcSrc="abcdefg\n";
    strcpy(strDest,stcSrc);
    printf("%s",strDest);
    
    memset(strDest,'\0',128);
    strncpy(strDest,stcSrc,2);//指定要复制的位数
    puts(strDest);
    
    memset(strDest,'\0',128);
    strncpy(strDest,"ycycycyc",2);
    puts(strDest);
    
	system("pause");
	return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

字符串的拼接与比较

  • 使用strcat(x,y)进行字符串的拼接,将y拼接到x上并更新x。
  • 使用strcmp(const char *s1,const char *s2) 进行字符串之间的比较。分别计算两个字符串对应的阿斯克码值进行比较:
    • s1>s2 返回1 ;
    • s2>s1 时返回 2 ;
    • 两个字符串相等时返回0。

示例

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char *stcSrc="abcdefg\n";
    //字符串的拼接 
    char strLen[128]="yyyy ";
    strcat(strLen,stcSrc);
    puts(strLen);
    
    //字符串的比较
    //int strcmp(const char *s1,const char *s2);
    char *test1="123";
    char *test2="1234";
    int ret=strcmp(test1,test2);//test1>test2 返回1 test2>test1 返回 2 相等返回0
    printf("%d",ret);
    
    //比较使用的小技巧:
    /*
    if (!strcmp(test1,test2)){
		printf("两个字符串一样\n")
    } */
    
    
	system("pause");
	return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

字符串的查找

查找字符串的子字符以及子字符串时,使用strchr以及strstr函数。
strchr:

char *strchr(const char *str, char c)
参数 str-- 要被检索的 C 字符串。
c-- 在 str 中要搜索的字符。
功能 :在参数str所指向的字符串中搜索第一次出现字符c(一个无符号字符)的位置。
返回值:返回一个指向该字符串中第一次出现的字符的指针,如果字符串中不包含该字符则返回NULL空指针。

strstr:

char *strstr(const char *haystack, const char *needle)
参数:haystack – 要被检索的 C 字符串。
needle – 在 haystack 字符串内要搜索的小字符串。
返回值 :该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。

示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
	/*
		函数原型
	char *strchr(const char *str, char c)
	参数
	str-- 要被检索的 C 字符串。
	c-- 在 str 中要搜索的字符。
	功能
	在参数str所指向的字符串中搜索第一次出现字符c(一个无符号字符)的位置。
	返回值
	返回一个指向该字符串中第一次出现的字符的指针,如果字符串中不包含该字符则返回NULL空指针。
	头文件
	#include <string.h>
	*/
	char *strc="abcde";
    char *p = NULL;
    p = strchr(strc,'b');
    if (p == NULL)
    {
		printf("没有找到\n");
    }
    else
    {
		printf("找到了\n");
		puts(p);//p是i的地址
    }
    
    
	/*
		下面是 strstr() 函数的声明。
			char *strstr(const char *haystack, const char *needle)
			参数
			haystack -- 要被检索的 C 字符串。
			needle -- 在 haystack 字符串内要搜索的小字符串。
			返回值
			该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。
	*/
    char *strtest="Ryjhhhh";
    char *a="jh";
    char *p1=NULL;
    p1 = strstr(strtest,a);
    puts(p1);
  
	system("pause");
	return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

字符串的大小写转换

  • 使用strlwr进行字符串的小写转换,不会创建一个新字符串返回,而是改变原有字符串
  • 使用strupr进行字符串的大写转化,不会创建一个新字符串返回,而是改变原有字符串
  • 注意:windows只能对数组字符串进行操作,使用字符串指针时会出现错误。

示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{

	/*
	头文件:#include <string.h>

	strlwr()用于将字符串中的字符转换为小写,其原型为:
		char *strlwr(char *str);

	【参数说明】str为要转换的字符串。

	【返回值】返回转换后的小写字符串,其实就是将str返回。

	也就是说,strlwr() 不会创建一个新字符串返回,而是改变原有字符串。
	所以strlwr()只能操作字符数组,而不能操作指针字符串,因为指针指向的字符串是作为常量保存在静态存储区的,常量不能被修改。
	*/  
	/*strupr函数用法与strwr一致,效果相反
	*/
	char strtest1[]="RyJ";
	puts(strlwr(strtest1));//小写
    puts(strupr(strtest1));//大写
    

	system("pause");
	return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

字符串的分割

C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。

声明
下面是 strtok() 函数的声明。

char *strtok(char *str, const char *delim)
参数
str -- 要被分解成一组小字符串的字符串。
delim -- 包含分隔符的 C 字符串。
返回值
该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{    
	
	/*
	C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。

	声明
	下面是 strtok() 函数的声明。

	char *strtok(char *str, const char *delim)
	参数
	str -- 要被分解成一组小字符串的字符串。
	delim -- 包含分隔符的 C 字符串。
	返回值
	该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。	
	*/

	char strtest2[]="Ryj,yi,er,san,si,wu";
    char *delim=",";
    char *p2=NULL;
    int i =0;
    char * p3[10];//指针数组
    p3[i] = strtok(strtest2,delim);
    if (p2!=NULL)
    {
		printf("提取出来的第%d个字符串为:%s \n",i+1,p2);
    }
    
    while(1)
    {   i=i+1;
		p3[i]= strtok(NULL,delim);
		if (p3[i]!=NULL)
        {	
            printf("提取出来的第 %d 个字符串为:%s\n",i,p3[i]);
        }
        else
        {
			printf("没有子字符串了!!!\n");
            break;
        }
            
    }
    puts(p2);
    p2 = strtok(NULL,delim);
    puts(p2);
	system("pause");
	return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

☀ 记录自己学习的同时,也希望能对大家有所帮助,欢迎留言交流!


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/694028
推荐阅读
相关标签
  

闽ICP备14008679号