Maine

纵有疾风起,人生不言弃

5. C语言基础-字符串处理函数

  1. fgets() — 字符串输入

基本语法:

#include <stdio.h>
char *fgets(char *s, int size, FILE *stream);

示例+细节:

#include <stdio.h>
char arr[100] = {0};
fgets(arr, sizeof(arr), stdin);

// 细节说明
// 1. stdid 是标准输入
// 2. 如果输入内容大于等于 sizeof(arr),fgets 只会取 sizeof(arr) - 1 个字符。
// 3. fgets 会将回车(换行符)读入
  1. Puts — 字符串输出

示例+细节:

#include <stdio.h>
char str[] = "hello maine....";
puts("%s", str);
// puts 和 printf 区别在于 puts 会在屏幕输出末尾自动加换行符,而 printf 不会
  1. Fputs — 字符串输出

和 printf 差不多。

示例+细节:

char str[] = "hello maine ...";
fputs(str, stdout);
// stdout 标准输出
  1. strlen — 计算字符串长度

示例+细节:

#include <string.h>     // 必须包含的头文件
char str[] = "hello";
size_t len = strlen(str);
printf("%d \n", len);   // 输出 5,不会包含结束符,到结束符停止

char str2[] = "he\0llo";
len = strlen(str2);
printf("%d \n", len);   // 输出 2

len = sizeof(str2);
printf("%d \n", len);   // 输出 7,包含结束符,不受结束符影响
  1. Strcpy — 字符串拷贝
#include <string.h>     // 必须包含的头文件
char from[] = "hello maine";
char to[100];
strcpy(from, to);       // 拷贝字符串

// 遇到 \0 就停止拷贝。
  1. Strncpy — 拷贝指定长度字符串
#include <string.h>
char from[] = "hello maine";
char to[] = "aaaaaaaaaaaaaaaaaaaaaaa";
strncpyto, from, sizeof(from));
printf("%s \n", to);            // 后面带 a

strncpy(to, from, sizeof(from)+1);
printf("%s \n", to);            // 不带 a,到结束符停止

// strncpy 拷贝指定长度字符串,可以拷贝 \0 ,但 \0 后面的字符不会被拷贝。
  1. Strcmp 和 strncmp — 字符串比较
#include <string.h>
char str1[] = "abc";
char str2[] = "abcd";

int res = strcmp(str1, str2);       // 整体比较 str2 > str1
int res2 = strncmp(str1, str2, 3);  // 比较前三个字符 str2 = str1

/**
    比较规则,逐个字符比较 ascii 码值得大小。
    如果 返回值 = 0 ,字符串相等
    如果 返回值 > 0 ,str1 > str2
    如果 返回值 < 0 ,str1 < str2
**/
  1. Strcat 和 strncat — 追加字符串
#include <string.h>
char from[] = " hello maine";
char to[100] = "abc";

strcat(to, from);   // abc hello maine
// strncat 可以指定长度
  1. Sprintf() 、sscanf()
int a = 10;
int b = 20;

printf("a = %d, b = %d \n", a ,b);  // 屏幕输出 a = 10, b = 20
char out[100];
sprintf(out, "a = %d, b = %d \n", a ,b); // 将输出保存到 out 中
printf("%s", out);

// scanf 从键盘获取输入,sscanf 按格式从字符串获取输入
char in[] = "a=10, b=20";
int a, b;
sscanf(in, "a=%d, b=%d", &a, &b);
printf("a=%d, b=%d \n", a, b);
  1. strstr 和 strchr — 字符串查询
/**
    strchr() 查询字符串中是否包含某个字符,如果有则返回字符的地址,没有返回 N ULL
**/
char str[] = "sncjabkjdsvs";
char* p = strchr(str, 'j');
if(p == NULL)
{
    printf("没有找到字母 'j' \n");
} else {
    printf("%s \n", p);
}
// 查找字符串,同上
char str[] = "sncjabkjdsvs";
char* p = strstr(str, "kjd");
if(p == NULL)
{
    printf("没有找到字符串 'kjd' \n");
} else {
    printf("%s \n", p);
}
  1. strtok() — 字符串切割
char str[] = "nihao,ma,woh,en,hao";
char* p;
// strtok 会破坏原来的字符串
// 第一次切割,要传递字符串
p = strtok(str, ",");
while (p != NULL) {
    printf("%s ", p);
    // 第二次切割要传递 NULL,
    p = strtok(NULL, ",");
}
  1. atoi, atof, atol — 字符串转整型、浮点型、长整型
// 跳过前面的空格字符,直到遇到数字或者负号开始转换,
// 遇到非数字或者字符结束符停止
char str[] = "23ddv0"; // "232" ok, "343vf" ok, " 23cd" ok, "scs343c" 0;
int a = atoi(str);
printf("%d \n", a);
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注