当前位置:网站首页>[C language] string function
[C language] string function
2022-07-07 18:24:00 【Ordinary person 1】
author :@ Ordinary person 1
special column :《C Language from 0 To 1》
In a word : In the past , All is prologue
explain : The past is irreparable , The future can change
We learned from 4 A function ——strlen\strcpy\strcat\strcmp, The length of these functions is unlimited , today , We naturally want to introduce some other functions . The content may be relatively large .
List of articles
String function with limited length
strncpy
char * strncpy ( char * destination, const char * source, size_t num );
- Copies the first num characters of source to destination. If the end of the source C string (which is signaled by a null-character) is found before num characters have been copied, destination is padded with zeros until a total of num characters have been written to it.
- Copy num Characters from the source string to the target space .
- If the length of the source string is less than num, After copying the source string , Add... After the target 0, until num individual .
below , Let's test it briefly :
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[20] = "abcdef";
char arr2[] = "hello world";
strncpy(arr1, arr2, 5);
printf("%s\n", arr1);
return 0;
}
function :
Let's take a look at the The first 3 spot :
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[20] = "abcdef";
char arr2[] = "ghi";
strncpy(arr1, arr2, 5);//arr2 Only 3 Here you have to copy 5 individual , What's the matter
printf("%s\n", arr1);
return 0;
}
F10 Debug and check before copying arr1 and arr2 It looks like this :
After copying ?
We can see clearly that , It will be used when the content is not enough ’\0’ To add !
strncat
char * strncat ( char * destination, const char * source, size_t num );
- Appends the first num characters of source to destination, plus a terminating null-character.
- If the length of the C string in source is less than num, only the content up to the terminating null-character is copied.
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[20] = "hello\0xxxxx";
printf("%s\n", arr1);
char arr2[] = "world";
strncat(arr1, arr2, 3);
printf("%s\n", arr1);
return 0;
}
As a result, we all know , What is the process like ? We might as well debug and have a look : Before appending :
After addition :
We can see clearly that , It will automatically add a ’\0’
What if the additional length is larger than itself ? Will it be like strncpy You can make up as many as you like ’\0’ Well ? Test a piece of code :
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[20] = "hello\0xxxxx";
printf("%s\n", arr1);
char arr2[] = "abc";
strncat(arr1, arr2, 6);
printf("%s\n", arr1);
return 0;
}
Before addition :
After addition :
The answer is No , Only one will be added ’\0’. By simple analysis , We probably know strncat Principle .
strncmp
int strncmp ( const char * str1, const char * str2, size_t num );Compare to a different character or the end of a string or num Compare all the characters .
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abc";
int ret = strncmp(arr1, arr2, 4);
printf("%d\n", ret);
if (ret == 0)
{
printf("==\n");
}
else if (ret < 0)
{
printf("<\n");
}
else
{
printf(">\n");
}
return 0;
}

actually , There are more functions n There will be more length restrictions , It doesn't make much difference , The string function with limited length makes the code more rigorous , We try to use .
String search
strstr
char * strstr ( const char *str1, const char * str2);Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1.
Simple understanding , This function is the function to find the substring
#include <stdio.h>
#include <string.h>
int main()
{
char email[] = "[email protected]";
char substr[] = "eichang";
char*ret = strstr(email, substr);
if (ret == NULL)
{
printf(" Substring does not exist \n");
}
else
{
printf("%s\n", ret);
}
return 0;
}

How to use it is not the point , The key point is how to simulate the implementation !
strstr Simulation Implementation of
Let's talk about the search process first :
Can be divided into Two kinds of To illustrate the situation :
A kind of It's a simple case : One match will find
Another kind It's a complicated situation : The first match was not found , You need to record the current location , Keep matching , It takes many times to find

The following is a simple simulation :
#include <assert.h>
#include <stdio.h>
char*my_strstr(const char*str1,const char*str2)
{
assert(str1 && str2);
const char* s1 = str1;
const char* s2 = str2;
const char* p = str1;
while (*p)
{
s1 = p;
s2 = str2;
while (*s1!='\0'&&*s2!='\0'&&* s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return (char*)p;
}
p++;
}
return NULL;
}
int main()
{
char email[] = "[email protected]";
char substr[] = "eichang";
//char*ret = strstr(email, substr);
char* ret = my_strstr(email, substr);
if (ret == NULL)
{
printf(" Substring does not exist \n");
}
else
{
printf("%s\n", ret);
}
return 0;
}
You can use the substring here KMP Algorithm , But it's more complicated , We won't expand the description .
strtok
char * strtok ( char * str, const char * sep );sep The parameter is a string , Defines the set of characters used as separators
The first parameter specifies a string , It contains 0 One or more by sep A character separated by one or more separators in a string remember .
strtok Function found str The next mark in , And use it \0 ending , Returns a pointer to the tag .( notes : strtok Function changes the string being manipulated , So it's using strtok The string segmented by function is usually the content of temporary copy And it can be modified .)
strtok The first argument of the function is not NULL , Function will find str The first mark in ,strtok The function will save it in the string Position in .
strtok The first argument to the function is NULL , The function will start at the same position in the string that is saved , Find the next target remember .
If there are no more tags in the string , Then return to NULL The pointer .
I think this is a strange function , However, it does not prevent us from recognizing that it cuts strings
#include <stdio.h>
#include <string.h>
int main()
{
const char* sep = "@.";
char email[] = "[email protected]";
char cp[30] = {
0 };
strcpy(cp, email);
char*ret = strtok(cp, sep);
printf("%s\n", ret);
ret = strtok(NULL, sep);
printf("%s\n", ret);
ret = strtok(NULL, sep);
printf("%s\n", ret);
return 0;
}

How and for Loop linked
#include <stdio.h>
#include <string.h>
int main()
{
const char* sep = "@.";
char email[] = "[email protected]";
char cp[30] = {
0 };
strcpy(cp, email);
char* ret = NULL;
for (ret = strtok(cp, sep); ret != NULL; ret = strtok(NULL, sep))
{
printf("%s\n", ret);
}
return 0;
}
Error message report
strerror
char * strerror ( int errnum );Return error code , The corresponding error message .
#include <stdio.h>
#include <string.h>
int main()
{
printf("%s\n", strerror(0));
printf("%s\n", strerror(1));
printf("%s\n", strerror(2));
printf("%s\n", strerror(3));
printf("%s\n", strerror(4));
printf("%s\n", strerror(5));
}

These do not need us to remember ,error-C A global error code storage variable of language settings
for instance :
#include <stdio.h>
#include <string.h>
int main()
{
FILE* pf = fopen("test.txt", "r");
if (pf == NULL)
{
printf("%s\n", strerror(errno));
return 1;
}
else
{
}
return 0;
}

Character classification function
There are many functions , Scattered , Does not Give examples one by one to illustrate , ad locum , You can know and practice by yourself :
function If his parameters meet the following conditions, it returns true
iscntrl Any control character
isspace Blank character : Space ‘ ’, Change the page ‘\f’, Line break ’\n’, enter ‘\r’, tabs ’\t’ Or vertical tabs ’\v’
isdigit Decimal number 0~9 isxdigit Hexadecimal number , Include all decimal digits , Lowercase letters af, Capital AF
islower Lowercase letters a~z
isupper Capital A~Z
isalpha Letter az or AZ
isalnum Letters or numbers ,az,AZ,0~9
ispunct Punctuation , Any graphic character that is not a number or letter ( Printable )
isgraph Any graphic character
isprint Any typeable character , Including graphic characters and white space characters
#include <stdio.h>
#include <ctype.h>
int main()
{
int i = 0;
char str[] = "Test String.\n";
char c;
while (str[i])
{
c = str[i];
if (isupper(c))
c = tolower(c);
putchar(c);
i++;
}
return 0;
}


边栏推荐
- 回归测试的分类
- Is it safe to open an online futures account now? How many regular futures companies are there in China?
- 现货白银分析中的一些要点
- 【demo】循环队列及条件锁实现goroutine间的通信
- Some key points in the analysis of spot Silver
- 性能测试过程和计划
- 2021年全国平均工资出炉,你达标了吗?
- [network attack and defense principle and technology] Chapter 4: network scanning technology
- PIP related commands
- Tips of this week 141: pay attention to implicit conversion to bool
猜你喜欢

Mui side navigation anchor positioning JS special effect

idea彻底卸载安装及配置笔记

简单几步教你如何看k线图图解

zdog. JS rocket turn animation JS special effects

Click on the top of today's headline app to navigate in the middle

Win11C盘满了怎么清理?Win11清理C盘的方法

Chapter 2 build CRM project development environment (database design)

『HarmonyOS』DevEco的下载安装与开发环境搭建

科学家首次观察到“电子漩涡” 有助于设计出更高效的电子产品

go语言的字符串类型、常量类型和容器类型
随机推荐
PIP related commands
2022年理财产品的一般收益率是多少?
[OKR target management] case analysis
What is the general yield of financial products in 2022?
Personal best practice demo sharing of enum + validation
Mui side navigation anchor positioning JS special effect
[trusted computing] Lesson 13: TPM extended authorization and key management
[principle and technology of network attack and Defense] Chapter 1: Introduction
Yearning-SQL审核平台
List selection JS effect with animation
小试牛刀之NunJucks模板引擎
Sanxian Guidong JS game source code
Afghan interim government security forces launched military operations against a hideout of the extremist organization "Islamic state"
The report of the state of world food security and nutrition was released: the number of hungry people in the world increased to 828million in 2021
Chapter 2 building CRM project development environment (building development environment)
cf:C. Factorials and Powers of Two【dp + 排序 + 选不选板子 + 选若干个数等于已知和的最少数】
[paddleseg source code reading] add boundary IOU calculation in paddleseg validation (1) -- val.py file details tips
Chapter 3 business function development (safe exit)
持续测试(CT)实战经验分享
PHP面试题 foreach($arr as &$value)与foreach($arr as $value)的用法





