C/C 语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C 语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。
strtok 字符串切割: 将指定的一段字符串,根据指定的分隔符进行切割,切割后分别存入到新数组.
代码语言:javascript复制#include <stdio.h>
int main(int argc, char* argv[])
{
char str[] = "hello,lyshark,welcome";
char *ptr;
ptr = strtok(str, ",");
while (ptr != NULL)
{
printf("切割元素: %sn", ptr);
ptr = strtok(NULL, ",");
}
char str[] = "192.168.1.1";
char *ptr;
char *SubAddr[4] = {0};
ptr = strtok(str, ".");
for (int x = 0; x < 4; x )
{
SubAddr[x] = ptr;
ptr = strtok(NULL, ".");
}
for (int x = 0; x < 4; x )
printf("%s n", SubAddr[x]);
system("pause");
return 0;
}
strcpy 字符串拷贝: 将一个字符串数组中的数据拷贝到新的字符串空间中,拷贝知道遇到结束符为止.
代码语言:javascript复制#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
char Array[] = "hello lyshark";
char tmp[100];
// 学习strcpy函数的使用方式
if (strcpy(tmp, Array) == NULL)
printf("从Array拷贝到tmp失败n");
else
printf("拷贝后打印: %sn", tmp);
// 清空tmp数组的两种方式
for (unsigned int x = 0; x < strlen(tmp); x )
tmp[x] = ' ';
memset(tmp, 0, sizeof(tmp));
// 学习strncpy函数的使用方式
if (strncpy(tmp, Array, 3) == NULL)
printf("从Array拷贝3个字符到tmp失败n");
else
printf("拷贝后打印: %sn", tmp);
system("pause");
return 0;
}
strcat 字符串连接: 将由src
指向的字节串的副本,追加到由dest
指向的以空字节终止的字节串的末尾.
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
char str1[50] = "hello ";
char str2[50] = "lyshark!";
char * str = strcat(str1, str2);
printf("字符串连接: %s n", str);
str = strcat(str1, " world");
printf("字符串连接: %s n", str);
str = strncat(str1, str2, 3);
printf("字符串连接: %s n", str);
system("pause");
return 0;
}
strcmp 字符串对比: 对比两个字符串是否一致,如果一致返回真否则返回假,此外如需要对比指定长度,可用strncmp()
函数.
#include <stdio.h>
#include <string.h>
int Str_Cmp(const char * lhs, const char * rhs)
{
int ret = strcmp(lhs, rhs);
if (ret == 0)
return 1;
else
return 0;
}
int main(int argc, char* argv[])
{
char *str1 = "hello lyshark";
char *str2 = "hello lyshark";
int ret = Str_Cmp(str1, str2);
printf("字符串是否相等: %d n", ret);
if (!strncmp(str1, str2, 3))
printf("两个字符串,前三位相等");
system("pause");
return 0;
}
strshr 字符串截取: 该函数主要实现从指定位置开始向后截取,直到遇到结束符停止输出.
代码语言:javascript复制#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
const char buffer[32] = "hello lyshark welcome";
const char needle[10] = "lyshark";
const char* ret;
ret = strstr(buffer, needle);
printf("子字符串是: %s n", ret);
system("pause");
return 0;
}
sprintf 格式化字符串: 该函数主要实现了对一段特定字符串进行格式化后并写入到新的缓冲区内.
代码语言:javascript复制#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
// 格式化填充输出
char buf[30] = { 0 };
sprintf(buf, "hello %s %s", "lyshark","you are good");
printf("格式化后: %s n", buf);
// 拼接字符串
char *s1 = "hello";
char *s2 = "lyshark";
memset(buf, 0, 30);
sprintf(buf, "%s --> %s", s1, s2);
printf("格式化后: %s n", buf);
// 数字装换位字符串
int number = 100;
memset(buf, 0, 30);
sprintf(buf, "%d", number);
printf("格式化后: %s n", buf);
system("pause");
return 0;
}
动态存储字符串: 首先分配二维指针并开辟空间,每次循环时开辟一维空间,并向其中写入字符串,最后循环输出.
代码语言:javascript复制#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
// 分配空间
char **p = malloc(sizeof(char *)* 5);
for (int x = 0; x < 5; x)
{
p[x] = malloc(64);
memset(p[x], 0, 64);
sprintf(p[x], "Name %d", x 1);
}
// 打印字符串
for (int x = 0; x < 5; x )
printf("%s n", p[x]);
// 释放空间
for (int x = 0; x < 5; x )
{
if (p[x] != NULL)
free(p[x]);
}
system("pause");
return 0;
}
实现字串长度统计: 字符串长度的计算原理时循环判断字符串是否遇到了