C语言字符串拼接函数集

字符串拼接函数

字符串内置库函数

C语言提供了许多用于处理字符串的内置函数。下面是一些常用的C语言字符串函数及其用法的简介:

strlen()

strlen()函数用于计算字符串的长度。该函数需要一个字符串作为参数,并返回字符串的长度。函数申明如下:

#include <string.h>

size_t strlen(const char *str);

使用示例:

char str[] = "Hello World";
size_t length = strlen(str);
printf("Length of the string: %zu\n", length);

输出内容:

Length of the string: 11

strcpy()

strcpy()函数用于将一个字符串复制到另一个字符串。该函数需要两个字符串作为参数,并返回目标字符串。函数申明如下:

#include <string.h>

char *strcpy(char *dest, const char *src);

使用示例:

char src[] = "Hello";
char dest[10];
strcpy(dest, src);
printf("Copied string: %s\n", dest);

输出内容:

Copied string: Hello

strcat()

strcat()函数用于将两个字符串连接起来。该函数需要两个字符串作为参数,并返回目标字符串。函数申明如下:

#include <string.h>

char *strcat(char *dest, const char *src);

使用示例:

char str1[] = "Hello";
char str2[] = " World";
strcat(str1, str2);
printf("Concatenated string: %s\n", str1);

输出内容:

Concatenated string: Hello World

strcmp()

strcmp()函数用于比较两个字符串。该函数需要两个字符串作为参数,并返回一个整数。函数申明如下:

#include <string.h>

int strcmp(const char *str1, const char *str2);

使用示例:

char str1[] = "Hello";
char str2[] = "World";
int result = strcmp(str1, str2);
if (result == 0) {
    
    
    printf("Strings are equal.\n");
} else if (result < 0) {
    
    
    printf("String 1 is less than string 2.\n");
} else {
    
    
    printf("String 1 is greater than string 2.\n");
}

输出内容:

String 1 is less than string 2.

strstr()

strstr()函数用于在一个字符串中查找另一个字符串。该函数需要两个字符串作为参数,并返回一个指向第一个字符串中第二个字符串第一次出现的位置的指针。函数申明如下:

#include <string.h>

char *strstr(const char *haystack, const char *needle);

使用示例:

char str[] = "Hello World";
char *found = strstr(str, "World");
if (found != NULL) {
    
    
    printf("Substring found at index: %ld\n", found - str);
} else {
    
    
    printf("Substring not found.\n");
}

输出内容:

Substring found at index: 6

strtok()

strtok()函数用于将一个字符串分解成一组字符串。该函数需要两个字符串作为参数,并返回一个指向第一个分解后的字符串的指针。函数申明如下:

#include <string.h>

char *strtok(char *str, const char *delim);

使用示例:

char str[] = "Hello World";
char *token = strtok(str, " ");
while (token != NULL) {
    
    
    printf("%s\n", token);
    token = strtok(NULL, " ");
}

输出内容:

Hello
World

sprintf()

sprintf()函数用于将格式化的数据写入字符串。该函数需要一个字符串作为参数,并返回写入的字符数。函数申明如下:

#include <stdio.h>

int sprintf(char *str, const char *format, ...);

使用示例:

char str[50];
int num = 123;
sprintf(str, "Integer: %d", num);
printf("%s\n", str);

输出内容:

Integer: 123

snprintf()

snprintf()函数用于将格式化的数据写入字符串。该函数需要一个字符串作为参数,并返回写入的字符数。与上面的区别是,该函数会在写入的字符数达到指定的最大值时停止写入。函数申明如下:

#include <stdio.h>

int snprintf(char *str, size_t size, const char *format, ...);

使用示例:

char str[50];
int num = 123;
snprintf(str, 50, "Integer: %d", num);
printf("%s\n", str);

输出内容:

Integer: 123

sscanf()

sscanf()函数用于从字符串中读取格式化的数据。该函数需要一个字符串作为参数,并返回成功匹配的数据项数。函数申明如下:

#include <stdio.h>

int sscanf(const char *str, const char *format, ...);

使用示例:

char str[] = "Hello World";
char buf[50];
sscanf(str, "%s", buf);
printf("%s\n", buf);

输出内容:

Hello

字符串拼接工具函数

根据以上库函数封装一些字符串常见的操作函数,便于调用,避免重复造轮子。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 将整数转换为字符串
char* intToString(int num) {
    
    
    // 估算数字的位数
    int len = snprintf(NULL, 0, "%d", num) + 1;
    char* str = (char*)malloc(len * sizeof(char));
    snprintf(str, len, "%d", num);
    return str;
}

// 将浮点数转换为字符串
char* floatToString(float num) {
    
    
    // 估算数字的位数
    int len = snprintf(NULL, 0, "%f", num) + 1;
    char* str = (char*)malloc(len * sizeof(char));
    snprintf(str, len, "%f", num);
    return str;
}

// 拼接两个字符串
char* concatenateStrings(const char* str1, const char* str2) {
    
    
    int len1 = strlen(str1);
    int len2 = strlen(str2);
    char* result = (char*)malloc((len1 + len2 + 1) * sizeof(char));
    strcpy(result, str1);
    strcat(result, str2);
    return result;
}
// 在指定位置插入字符串
char* insertString(const char* original, const char* insertion, int position) {
    
    
    int lenOriginal = strlen(original);
    int lenInsertion = strlen(insertion);
    if (position < 0 || position > lenOriginal)
        return NULL;

    char* result = (char*)malloc((lenOriginal + lenInsertion + 1) * sizeof(char));
    strncpy(result, original, position);
    result[position] = '\0';
    strcat(result, insertion);
    strcat(result, original + position);
    return result;
}

// 替换字符串中的子串
char* replaceString(const char* original, const char* target, const char* replacement) {
    
    
    int lenOriginal = strlen(original);
    int lenTarget = strlen(target);
    int lenReplacement = strlen(replacement);
    if (lenTarget == 0)
        return NULL;

    char* result = (char*)malloc((lenOriginal + 1) * sizeof(char));
    const char* ptr = original;
    char* pos = strstr(ptr, target);
    if (pos == NULL)
        return strcpy(result, original);

    int lenPrefix = pos - ptr;
    strncpy(result, ptr, lenPrefix);
    result[lenPrefix] = '\0';

    while (pos != NULL) {
    
    
        strcat(result, replacement);
        ptr = pos + lenTarget;
        pos = strstr(ptr, target);

        if (pos != NULL) {
    
    
            lenPrefix = pos - ptr;
            strncat(result, ptr, lenPrefix);
            result[lenPrefix + strlen(result)] = '\0';
        }
    }

    strcat(result, ptr);
    return result;
}

// 去重字符串中的重复字符
void removeDuplicates(char* str) {
    
    
    if (str == NULL)
        return;

    int len = strlen(str);
    if (len <= 1)
        return;

    int index = 1; // 记录非重复字符的位置

    for (int i = 1; i < len; i++) {
    
    
        bool isDuplicate = false;

        for (int j = 0; j < index; j++) {
    
    
            if (str[i] == str[j]) {
    
    
                isDuplicate = true;
                break;
            }
        }

        if (!isDuplicate) {
    
    
            str[index] = str[i];
            index++;
        }
    }

    str[index] = '\0'; // 添加字符串结束符
}

// 去除字符串中的多余字符(如 \0、\n、\t)
void removeExtraCharacters(char* str) {
    
    
    if (str == NULL)
        return;

    int len = strlen(str);
    if (len == 0)
        return;

    int index = 0;

    for (int i = 0; i < len; i++) {
    
    
        if (str[i] != '\0' && str[i] != '\n' && str[i] != '\t') {
    
    
            str[index] = str[i];
            index++;
        }
    }

    str[index] = '\0'; // 添加字符串结束符
}

result[index] = '\0';
return result;
// 拼接字符串和整数
char* concatenateStringAndInt(const char* str, int num) {
    
    
    char* intStr = intToString(num);
    char* result = concatenateStrings(str, intStr);
    free(intStr);
    return result;
}

// 拼接字符串和浮点数
char* concatenateStringAndFloat(const char* str, float num) {
    
    
    char* floatStr = floatToString(num);
    char* result = concatenateStrings(str, floatStr);
    free(floatStr);
    return result;
}

上述代码中定义了以下函数集:

intToString: 将整数转换为字符串。
floatToString: 将浮点数转换为字符串。
concatenateStrings: 拼接两个字符串。
insertString: 在指定位置插入字符串。
replaceString: 替换字符串中的子串。
removeDuplicates: 去重字符串中的重复字符。
removeExtraCharacters: 去除字符串中的多余字符(如 \0、\n、\t)。
concatenateStringAndInt: 拼接字符串和整数。
concatenateStringAndFloat: 拼接字符串和浮点数。

推荐一个零声学院免费教程,个人觉得老师讲得不错,分享给大家,有兴趣可以去看看:[Linux,Nginx,DPDK等技术内容,点击立即学习: 链接.

猜你喜欢

转载自blog.csdn.net/weixin_36184908/article/details/130847604