Linux-应用编程学习笔记(字符串处理)

一、字符串输入/输出

1、字符串输出

//C库函数,向标准输出设备(屏幕、显示器)输出字符串并自行换行
#include <stdio.h>
int puts(const char *s);

s: 需要进行输出的字符串。
返回值: 成功返回一个非负数;失败将返回 EOF, EOF 其实就是-1。
//C库函数,既可以是标准输出、标准错误设备,也可以是一个普通文件。
#include <stdio.h>
int fputs(const char *s, FILE *stream);

s: 需要输出的字符串。
stream: 文件指针。
返回值: 成功返回非负数;失败将返回 EOF。
//C库函数,把参数 c 指定的字符(一个无符号字符)输出到标准输出设备
include <stdio.h>
int putchar(int c);

c: 需要进行输出的字符。
返回值: 出错将返回 EOF。
//C库函数,既可以是标准输出、标准错误设备,也可以是一个普通文件。
#include <stdio.h>
int fputc(int c, FILE *stream);

c: 需要进行输出的字符。
stream: 文件指针。
返回值: 成功时返回输出的字符; 出错将返回 EOF。

2、字符串输入

//C库函数
#include <stdio.h>
char *gets(char *s);

s: 指向字符数组的指针, 用于存储字符串。
返回值: 如果成功, 该函数返回指向 s 的指针; 如果发生错误或者到达末尾时还未读取任何字符,则返
回 NULL。

gets和scanf区别:1、gets只以回车换行符为分隔符,scanf以空格,换行符,TAB的名号都为分隔符。2、gets读取的时候,会丢弃回车换行符,scanf不会讲分隔符读走丢弃。

二、字符串长度

//C库函数
#include <string.h>
size_t strlen(const char *s);

s: 需要进行长度计算的字符串,字符串必须包含结束字符' \0 '。
返回值: 返回字符串长度(以字节为单位),字符串结束字符' \0 '不计算在内。

sizeof 和 strlen 的区别

  •  sizeof 是 C 语言内置的操作符关键字,而 strlen 是 C 语言库函数
  • sizeof 仅用于计算数据类型的大小或者变量的大小,而 strlen 只能以结尾为' \0 '的字符串作为参数;
  • 编译器在编译时就计算出了 sizeof 的结果,而 strlen 必须在运行时才能计算出来;
  • sizeof 计算数据类型或变量会占用内存的大小, strlen 计算字符串实际长度

三、字符串拼接

#include <string.h>
char *strcat(char *dest, const char *src);

dest: 目标字符串。
src: 源字符串。
返回值: 返回指向目标字符串 dest 的指针。

要保证 dest 有足够的存储空间来容纳两个字符串,否则会导致溢出错误; dest 末尾的' \0 '结束字符会被覆盖, src 末尾的结束字符'\0 '会一起被复制过去,最终的字符串只有一个' \0 '。




//可以指定源字符串追加到目标字符串的字符数量
#include <string.h>
char *strncat(char *dest, const char *src, size_t n);

dest: 目标字符串。
src: 源字符串。
n: 要追加的最大字符数。
返回值: 返回指向目标字符串 dest 的指针。

四、字符串拷贝

//必须保证dest空间够大
#include <string.h>
char *strcpy(char *dest, const char *src);

dest: 目标字符串。
src: 源字符串。
返回值: 返回指向目标字符串 dest 的指针。



#include <string.h>
char *strncpy(char *dest, const char *src, size_t n);

dest: 目标字符串。
src: 源字符串。
n: 从 src 中复制的最大字符数。
返回值: 返回指向目标字符串 dest 的指针。

五、内存填充

#include <string.h>
void *memset(void *s, int c, size_t n);

s: 需要进行数据填充的内存空间起始地址。
c: 要被设置的值,该值以 int 类型传递。
n: 填充的字节数。
返回值: 返回指向内存空间 s 的指针。



#include <strings.h>
void bzero(void *s, size_t n);

s: 内存空间的起始地址。
n: 填充的字节数。
返回值: 无返回值。

六、字符串比较

#include <string.h>
int strcmp(const char *s1, const char *s2);

s1: 进行比较的字符串 1。
s2: 进行比较的字符串 2。
返回值:
⚫ 如果返回值小于 0,则表示 str1 小于 str2
⚫ 如果返回值大于 0,则表示 str1 大于 str2
⚫ 如果返回值等于 0,则表示字符串 str1 等于字符串 str2




#include <string.h>
int strncmp(const char *s1, const char *s2, size_t n);

s1: 参与比较的第一个字符串。
s2: 参与比较的第二个字符串。
n: 最多比较前 n 个字符。
返回值: 返回值含义与 strcmp()函数相同。

七、字符串查找

//从前往后查找字符
#include <string.h>
char *strchr(const char *s, int c);

s: 给定的目标字符串。
c: 需要查找的字符。
返回值: 返回字符 c 第一次在字符串 s 中出现的位置,如果未找到字符 c,则返回 NULL。





//从后到前查找字符
#include <string.h>
char *strrchr(const char *s, int c);
函数参数和返回值含义与 strchr()函数相同。





#include <string.h>
char *strstr(const char *haystack, const char *needle);

haystack: 目标字符串。
needle: 需要查找的子字符串。
返回值: 如果目标字符串 haystack 中包含了子字符串 needle,则返回该字符串首次出现的位置;如果未
能找到子字符串 needle,则返回 NULL。

八、字符串与数字互转

1、字符串转整形

//使用 atoi()、 atol()、 atoll()函数只能转换十进制表示的数字字符串,即 0~9。
#include <stdlib.h>
int atoi(const char *nptr);
long atol(const char *nptr);
long long atoll(const char *nptr);

nptr: 需要进行转换的字符串。
返回值: 分别返回转换之后得到的 int 类型数据、 long int 类型数据以及 long long 类型数据。





#include <stdlib.h>
long int strtol(const char *nptr, char **endptr, int base);
long long int strtoll(const char *nptr, char **endptr, int base);

nptr: 需要进行转换的目标字符串。
endptr: char **类型的指针, 如果 endptr 不为 NULL,则 strtol()或 strtoll()会将字符串中第一个无效字符的地址存储在*endptr 中。如果根本没有数字, strtol()或 strtoll()会将 nptr 的原始值存储在*endptr 中(并返回 0)。 也可将参数 endptr 设置为 NULL,表示不接收相应信息。
base: 数字基数, 参数 base 必须介于 2 和 36(包含)之间,或者是特殊值 0。 
返回值: 分别返回转换之后得到的 long int 类型数据以及 long long int 类型数据。




#include <stdlib.h>
unsigned long int strtoul(const char *nptr, char **endptr, int base);
unsigned long long int strtoull(const char *nptr, char **endptr, int base);

2、字符串转浮点型

#include <stdlib.h>
double atof(const char *nptr);

nptr: 需要进行转换的字符串。
返回值: 返回转换得到的 double 类型数据。




#include <stdlib.h>
double strtod(const char *nptr, char **endptr);
float strtof(const char *nptr, char **endptr);
long double strtold(const char *nptr, char **endptr);

endptr:NULL全部转换

3、数字转字符串

printf()、sprintf()、snprintf()

九、给应用程序传参

int main(int argc, char **argv)
{
    /* 代码 */
}

int main(int argc, char *argv[])
{
    /* 代码 */
}

/*传递进来的参数以字符串的形式存在,字符串的起始地址存储在 argv 数组中,参数 argc 表示传递进来
的参数个数,包括应用程序自身路径名,多个不同的参数之间使用空格分隔开来,如果参数本身带有空格、
则可以使用双引号" "或者单引号' '的形式来表示。*/

十、正则表达式

正则表达式通常被用来检索、替换那些符合某个模式(规则)的字符串,正则表达式描述了一种字符串的匹配模式(pattern),可以用来检查一个给定的字符串中是否含有某种子字符串、将匹配的字符串替换或者从某个字符串中取出符合某个条件的子字符串。

十一、C语言中正则表达式

编译正则表达式
匹配正则表达式
释放正则表达式
匹配 URL 的正则表达式:
^((ht|f)tps?)://[-A-Za-z0-9_]+(\.[-A-Za-z0-9_]+)+([-A-Za-z0-9_.,@?^=%&:/~+#]*[-A-Za-z0-9_@?^=%&/~+#])?$

相关推荐

  1. Linux-应用编程学习笔记(字符串处理)

    2024-06-11 11:56:01       13 阅读
  2. Linux应用编程笔记】GPIO

    2024-06-11 11:56:01       33 阅读
  3. Linux应用编程笔记】输入设备

    2024-06-11 11:56:01       40 阅读
  4. Linux应用编程笔记】tslib库使用

    2024-06-11 11:56:01       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-11 11:56:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-11 11:56:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-11 11:56:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-11 11:56:01       18 阅读

热门阅读

  1. ASP.NET的WebService跨域CORS问题解决方案

    2024-06-11 11:56:01       11 阅读
  2. Ubuntu中安装Eclipse C++的详细步骤

    2024-06-11 11:56:01       12 阅读
  3. 在 RISC-V 设计中发现可远程利用的漏洞

    2024-06-11 11:56:01       10 阅读
  4. VK Cup 2015 - Round 1 C. The Art of Dealing with ATM

    2024-06-11 11:56:01       12 阅读