C语言学习笔记之字符串间的那些事

 更新时间:2022年04月17日 17:01:06   作者:禾子日月  
字符串是C语言中最重要的数据类型之一,最近借助《C Primer Plus》一书来学习C中的常用字符串操作,在此作为笔记记录,下面这篇文章主要给大家介绍了C语言学习笔记之字符串间的那些事,需要的朋友可以参考下

字符串表示方式

字符串常量

用双引号括起来的内容称为字符串常量,例如:"Hello, World!"为一个字符串常量。双引号中的字符和编译器自动加入末尾的\0字符,都作为字符串存储在内存中。

字符串常量属于静态存储类别。当在函数中使用字符串常量时,该字符串只会被存储一次,用双引号括起来的内容被视为指向该字符串存储位置的指针,如以下例程所示:

/* strptr.c -- 把字符串看做指针 */
#include <stdio.h>

int main(void) {

    printf("%s, %p, %c\n", "Who", "you", *"are");

    return 0;
}

程序输出结果如下:

Who, 0x400668, a

#strlen

strlen函数在使用前需要添加一个头文件:#include<string.h>

函数声明:size_tstrlen(const char *s);

函数功能:获取字符串的长度,不包括‘\0’。

返回值:返回字符串中的字符个数(空格也算一个字符)

例:

#inclue<stdio.h>
#include<string.h>
int main()
{
	char str[]="hello world";
	int len=strlen(str);
	printf("%d",len);//len=11
}

#strcpy和strncpy

##strcpy

函数声明:char *strcpy(char *dest,const char *src);

函数说明:拷贝src指向的字符串到dest指针指向的内存中,‘\0’也会拷贝过去。

函数返回值:目的内存的地址。

※※注意:在使用此函数时,必须保证dest指向的内存空间足够大,否则会出现内存污染。

例:

#include<stdio.h>
#include<string.h> 
int main()
{
	char str[]="hello world";
	char s[]="hello earth";
	strcpy(str,s);
	printf("%s",str);//打印结果是hello earth
} 

##strcnpy

函数声明:char *strncpy(char *dest,const char *src,size_tn);

函数说明:将src指向的字符串前n个字节,拷贝到dest指向的内存中。

返回值:目的内存的首地址。

※※注意:1.strncpy不拷贝‘\0’

                 2.如果n大于src指向的字符串中的字符个数,则在dest后面填充n-strlen(src)个'\0'

例:

#include<stdio.h>
#include<string.h> 
int main()
{
	char str[]="hello world";
	char s[]="hello earth";
	strncpy(str,s,8);
	printf("%s",str);
} 

#strcat和strncat

##strcat

函数声明:char *strcat(char *dest,const char *src);

函数功能:strcat函数追加src字符串到dest指向的字符串的后面,追加的时候会追加'\0'。

※※注意:保证dest指向的内存空间足够大。

例:

#include<stdio.h>
#include<string.h> 
int main()
{
	char str[100]="hello world";
	char s[]="hello";
	strcat(str,s);
	printf("%s",str);
} 

 ##strncat

函数声明:char *strncat(char *dest,const char *src,size_tn);

追加src指向的字符串的前n个字符,到dest指向的字符串的后面。

※※注意:如果n大于src的字符个数,则只将src字符串追加到dest指向的字符串的后面,追加的时候会追加'\0'

例:

#include<stdio.h>
#include<string.h> 
int main()
{
	char str[100]="hello world";
	char s[]="hello";
	strncat(str,s,4);
	printf("%s",str);
} 

#strcmp和strncmp

##strcmp

函数声明:int strcmp(const char *s1,const char *s2);

函数说明:比较s1和s2指向的字符串的大小。

比较的方法:逐个字符去比较ASCII码,一旦比较出大小则返回。

返回值:

如果s1指向的字符串大于s2指向的字符串,返回1

如果s1指向的字符串小于s2指向的字符串,返回-1

如果相等的话返回0

例:

#include<stdio.h>
#include<string.h> 
int main()
{
	char str1[]="hello world";
	char str2[]="hello world";
	int ret;
	ret=strcmp(str1,str2);
	printf("%d",ret);//ret==0
} 

##strncmp

函数声明:int strncmp(const char *s1,const char *s2,size_t n);

函数说明:比较s1和s2指向的字符串中的前n个字符

例:

#include<stdio.h>
#include<string.h> 
int main()
{
	char s1[]="hello world";
	char s2[]="hello earth";
	int ret;
	ret=strncmp(s1,s2,5);
	if(ret>0)
		printf("s1的前五个字符大于s2的前五个字符\n"); 
	else if(ret<0)
		printf("s1的前五个字符小于s2的前五个字符\n"); 
	else
		printf("s1的前五个字符等于s2的前五个字符\n"); 
} 

关于字符串的知识点我暂时梳理了这么多,还有许多未涉及到的地方,希望大家给予意见,接下来让我们做一道比较有意思的题目。

#题目

输入n行身份证号,按照年龄排序(从大到小)并输出。

#include<stdio.h>
#include<string.h>
 
int main()
{
	char a[100][100],birth[100][100],s[100];
	int n,i,j;scanf("%d",&n);
	gets(s);
	for(i=0;i<n;i++)
	{
		gets(a[i]);
		strncpy(birth[i],a[i]+6,8);
	}
	for(i=0;i<n;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(strcmp(a[j],a[i])<0)
			{
				strcpy(s,a[j]);
				strcpy(a[j],a[i]);
				strcpy(a[i],s);
			}
		}
	}
	for(i=0;i<n;i++)
	{
		printf("%s\n",a[i]);
	}
 } 

总结

到此这篇关于C语言学习笔记之字符串间的那些事的文章就介绍到这了,更多相关C语言字符串内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++中求数组长度的方法详解

    C++中求数组长度的方法详解

    C++中没有直接提供求数组长度的方法,提供了sizeof(),begin(),end()等方法,可以供求数组长度使用,文中通过代码示例给大家讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-12-12
  • C语言巧用二分查找实现猜数游戏

    C语言巧用二分查找实现猜数游戏

    二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列,本篇文章教你用二分查找编写猜数字游戏
    2022-02-02
  • C语言字符/字符串相关函数收藏大全

    C语言字符/字符串相关函数收藏大全

    这篇文章主要给大家介绍了关于C语言字符/字符串的相关函数,文中通过示例代码总结的非常详细,对大家学习或者使用C语言具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • C++实现LeetCode(152.求最大子数组乘积)

    C++实现LeetCode(152.求最大子数组乘积)

    这篇文章主要介绍了C++实现LeetCode(152.求最大子数组乘积),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Qt中QPushButton组件的使用详解

    Qt中QPushButton组件的使用详解

    QPushButton是Qt库中的一个重要组件,本文主要介绍了Qt中QPushButton组件的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • C++类和对象基础详解

    C++类和对象基础详解

    类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数
    2021-08-08
  • C++面试八股文之智能指针详解

    C++面试八股文之智能指针详解

    智能指针是C++11引入的类模板,用于管理资源,行为类似于指针,但不需要手动申请、释放资源,本文主要为大家介绍了它的相关知识,需要的可以参考一下
    2023-06-06
  • C语言位运算符的具体使用

    C语言位运算符的具体使用

    位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。本文就详细的介绍一下,感兴趣的可以了解一下
    2021-09-09
  • C++ Qt开发之关联容器类使用方法详解

    C++ Qt开发之关联容器类使用方法详解

    当我们谈论编程中的数据结构时,顺序容器是不可忽视的一个重要概念,Qt 中提供了丰富的容器类,用于方便地管理和操作数据,本章我们将主要学习关联容器,主要包括 QMap ,QSet和 QHash,感兴趣的朋友跟着小编一起来学习吧
    2023-12-12
  • C程序函数调用&系统调用

    C程序函数调用&系统调用

    这篇文章主要介绍了C程序函数调用&系统调用,需要的朋友可以参考下
    2016-09-09

最新评论