C语言中如何利用函数将字符串逆置、拷贝、追加、查找等操作
xsobi 2024-11-24 00:34 2 浏览
1、指针与字符串的关系
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int main0101()
{
//char ch[] = "hello wrold";
//char* p = ch;
//printf("%s\n", p);
//printf("%c\n", *p);
char ch[] = "hello wrold";//栈区字符串可以修改
char* p = "hello world";//数据区常量区字符串不可修改
char* p1 = "hello world";
printf("%p\n", p);
printf("%p\n",p1);
//ch[2] = 'm';
//p[2] = 'm';//err
//*(p + 2) = 'm';//err
printf("%s\n", p);
printf("%s\n", ch);
return 0;
}
int main0102 ()
{
//字符串数组
//指针数组 下4行
//char ch1[] = "hello";
//char ch2[] = "world";
//char ch3[] = "dabaobei";
//char* arr[] = { ch1,ch2,ch3 };
char* arr[] = { "hello","world","dabaobei" };//字符串数组
//for (int i = 0; i < 3; i++)
//{
// printf("%c\n", arr[i][0]);//打印3个字符串的首字母
//}
for (int i = 0; i < 3 - 1; i++)//字符串排序
{
for (int j = 0; j < 3 - 1 - i; j++)
{
if (arr[j][0] > arr[j + 1][0])//找首字符进行比较
{
char* temp = arr[j];//交换指针数组元素进行排序
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < 3; i++)
{
printf("%s\n", arr[i]);
}
return 0;
}
2、字符指针作为函数参数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int my_strlen01(char* ch)
{
//计算字符串有效长度
int i = 0;
while (ch[i] != '\0')
{
i++;
}
return i;
}
int my_strlen(char* ch)
{
char* temp = ch;
while (*temp != '\0')
{
temp++;
}
return temp - ch;
}
int main02()
{
char ch[] = "hello world";
//printf("%s\n", ch);
int len = my_strlen(ch);
printf("%d\n", len);
return 0;
}
3、const修饰指针
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int main0301()
{
const int a = 10;
//a = 100;//err
int* p = &a;//通过一级指针间接修改变量的值
*p = 100;
return 0;
}
int main0302()
{
char ch1[] = "hello";
char ch2[] = "world";
//指向常量的指针 可以修改指针变量的值 不可以修改指针变量指向内存空间的值
const char* p = ch1;
//*p = 'm';//err
//p[2] = 'm';//err 等同于 *(p+2)='m';
//p = ch2;//ok
}
int main0303()
{
char ch1[] = "hello";
char ch2[] = "world";
//常量指针
//可以修改指针变量指向内存空间的值
//不可以修改指针变量的值
char* const p = ch1;
//p = ch2;//err
//p[2] = 'm';//ok
*(p + 2) = 'm';
printf("%s\n", p);
printf("%s\n", ch1);
return 0;
}
int main0304()
{
char ch1[] = "hello";
char ch2[] = "world";
const char* const p = ch1;
//p = ch2;//err
//*p = 'm';//err
//p[2] = 'm';//err
char** p1 = &p;
//*p1 = ch2;//ok
*(*p1 + 1) = 'm';
return 0;
}
4、#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
//gcc -o hello hello.c(4个参数 "gcc" "-o" "hello" "hello.c")
//int argc 表示传递参数的个数
//char* argv[]={"gcc" "-o" "hello" "hello.c"};表示参数具体内容
int main04(int argc, char* argv[])
{
if (argc < 3)
{
printf("缺少参数\n");
return -1;
}
for (int i = 0; i < argc; i++)
{
printf("%s\n", argv[i]);
}
return 0;
}
5、统计字符串出现次数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
char* my_strstr(char* src, char* dest)
{
char* fsrc = src;//遍历源字符串指针
char* rsrc = src;//记录相同字符串首地址
char* tdest = dest;
while (*fsrc)
{
rsrc = fsrc;
while (*fsrc == *tdest && *fsrc != '\0')
{
fsrc++;
tdest++;
}
if (*tdest == '\0')
{
return rsrc;
}
tdest = dest;//目标字符串更新到起始位置
fsrc = rsrc;
fsrc++;
}
return NULL;
}
int main0501()
{
char *str = "11abcd111122abcd333abcd3322abc33333222qqq";
char ch[] = "abcd";
char* p = my_strstr(str, ch);
int count = 0;//记录个数
while (p != NULL)
{
count++;
p = p + strlen(ch);
p = my_strstr(p, ch);
}
printf("abcd在字符串中出现:%d次\n",count);
return 0;
}
int main0502(void)
{
char* str = "11abcd111122abcd333abcd3322abc33333222qqq";
char ch[] = "abcd";
char* p = my_strstr(str, ch);
int count = 0;//记录个数
do
{
if (p)
{
count++;
p += strlen(ch);
p = my_strstr(p, ch);
}
} while (p);
printf("%dn", count);
return 0;
}
6、计算非空字符串个数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int getstrcount01(char* ch)//统计非空字符串个数
{
int count = 0;
int i = 0;
while (ch[i])
{
if (ch[i] != ' ')
{
count++;
}
i++;
}
return count;
}
int getstrcount(char* ch)
{
int count = 0;
while (*ch)
{
if (*ch != 32)
{
count++;
}
ch++;
}
return count;
}
int main0601()//统计非空字符串个数
{
char ch[] = " hello world ";
int len =getstrcount(ch);
printf("%d\n", len);
return 0;
}
int main0602()
{
//统计字符串出现次数
char ch[] = "helloworldjintianshishiyiyueshirinihao";
//存储字符串出现次数
int arr[26] = { 0 };
for (int i = 0; i < strlen(ch); i++)
{
arr[ch[i] - 'a']++;
}
for (int i = 0; i < 26; i++)
{
if(arr[i]!=0)//出现次数为0的字母不打印出来
printf("字母:%c出现次数:%d\n", i + 'a', arr[i]);
}
return 0;
}
7、将字符串逆置
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
void inverse01(char* ch)
{
int i = 0;
int j = strlen(ch) - 1;//最后一个字符的个数
while (i < j)
{
char temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
i++;
j--;
}
}
void inverse(char* ch)
{
char* ftemp = ch;
char* btemp = ch + strlen(ch) - 1;
printf("%c\n", *btemp);
while (ftemp < btemp)
{
char temp = *ftemp;
*ftemp = *btemp;
*btemp = temp;
ftemp++;
btemp--;
}
return;
}
int main0701()
{
char ch[] = "hello world";
inverse(ch);
printf("%s\n", ch);
return 0;
}
//回文字符串
//abcba abccba abcbcba
int symm(char* ch)
{
char* ftemp = ch;
char* btemp = ch + strlen(ch) - 1;
while (ftemp < btemp)
{
if (*ftemp ==! *btemp)
return 1;
ftemp++;
btemp--;
}
return 0;
}
int main0702(void)
{
char ch[] = "abcba";
int value = symm(ch);
if (!value)
{
printf("相同\n");
}
else
{
printf("不相同\n");
}
}
8、将字符串拷贝strcpy函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
void my_strcpy(char* dest, char* src)
{
while (*dest++ = *src++);
}
void my_strncpy(char* dest, const char* src, size_t n)
{
while ((*dest++ = *src++) && --n);
}
int main0801()//拷贝字符串
{
char ch[] = "hello world";
char str[100] = { 0 };
//my_strcpy(str, ch); //字符串拷贝
//strncpy(str, ch, 5);//系统自带函数 字符串有限拷贝
my_strncpy(str, ch, 5);
//strcpy(str, ch);//系统自带函数 将ch中的字符串拷贝到str中
printf("---%s---\n", str);
}
9、将字符串追加strncat函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
void my_strcat(char*dest,const char* src)
{
while (*dest)dest++;//找到dest字符串中\0位置
while (*dest++ = *src++);
}
void my_strncat(char* dest, char* src, size_t n)
{
while (*dest)dest++;
while ((*dest++ = *src++)&&--n);
}
int main09()// 系统函数strcat 追加字符串
{
char dest[100] = "hello";
char src[] = "world";
//strncat(dest, src, 30);
my_strncat(dest, src, 30);
//strcat(dest, src);
//my_strcat(dest, src);
printf("%s\n", dest);
return 0;
}
10、字符串比较strcmp函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int my_strcmp01(const char* s1, const char* s2)
{
while (*s1 == *s2)
{
if (!*s1 )
{
return 0;
}
s1++;
s2++;
}
return *s1 > * s2 ? 1 : -1;
}
//int my_strcmp(const char *s1, const char *s2)
//{
// while (*s1++ = *s2++ && !*s1);
// if (!*--s1&&!*--s2)return 0;
// return *s1 > * s2 ? 1 : -1;
//}
int my_strncmp(const char* s1, const char* s2, size_t n)
{
for (int i = 0; i < n&&s1[i]&&s2[i];i++)
{
if (s1[i] != s2[i])
{
return s1[i] > s2[2] ? 1 : -1;
}
}
}
int main010()
{
char ch1[] = "hello world";
char ch2[] = "hello world";
//int value = strcmp(ch1, ch2);
//比较两个字符串'\0'之前大小 相等返回0 第一个大于第二个返回1 小于返回-1
//int value = strncmp(ch1, ch2, 5);
//比较'\0'前n个字符大小,相等返回0 第一个大于第二个返回1 小于返回-1
//int value = my_strcmp(ch1, ch2);
//int value = my_strncmp(ch1, ch2, 5);
//printf("%d\n", value);
if (!strcmp(ch1, ch2))
{
printf("相同\n");
}
else
{
printf("不相同\n");
}
return 0;
}
11、字符串格式化sscanf、sprintf函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int main11_01()
{
char ch[100];
//sprintf(ch, "hello world");
//sprintf(ch, "%d+%d=%d", 1, 2, 3);
//sprintf(ch, "%02d+%02d=%02d",1,2,3);
sprintf(ch, "%x+%o=%d", 0xabc, 110, 17);
printf("%s\n", ch);
}
int main011()
{
//char ch[] = "1+2=3";
char ch[] = "hello world";
int a, b, c;
char str1[100];
char str2[100];
//sscanf(ch, "%[^\n]",str);//正则表达式 读取空格字符
sscanf(ch, "%5s%s", str1,str2);
printf("%s\n%s\n", str1,str2);
//printf("%d\n", a);
//printf("%d\n", b);
//printf("%d\n", c);
return 0;
}
12、字符串查找strstr函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
char* my_strchr(const char* s, int c)
{
while (*s)
{
if (*s == c)
{
return s;
}
s++;
NULL;
}
}
int main12_01()
{
char ch[] = "hello world";
char c = 'o';
//char* p = strchr(ch, c);
char* p = my_strchr(ch, c);
printf("%s\n", p);
return 0;
}
int main12_02(void)
{
char ch[] = "hello world";
char str[] = "llo";
char* p = strstr(ch,str);
printf("%s\n", p);
}
- 上一篇:波段顶底主图(主图叠加)
- 下一篇:CAD,自制插件求所选线段总长度,命令TE
相关推荐
- 好用的云函数!后端低代码接口开发,零基础编写API接口
-
前言在开发项目过程中,经常需要用到API接口,实现对数据库的CURD等操作。不管你是专业的PHP开发工程师,还是客户端开发工程师,或者是不懂编程但懂得数据库SQL查询,又或者是完全不太懂技术的人,通过...
- 快速上手:Windows 平台上 cURL 命令的使用方法
-
在工作流程中,为了快速验证API接口有效性,团队成员经常转向直接执行cURL命令的方法。这种做法不仅节省时间,而且促进了团队效率的提升。对于使用Windows系统的用户来说,这里有一套详细...
- 使用 Golang net/http 包:基础入门与实战
-
简介Go的net/http包是构建HTTP服务的核心库,功能强大且易于使用。它提供了基本的HTTP客户端和服务端支持,可以快速构建RESTAPI、Web应用等服务。本文将介绍ne...
- #小白接口# 使用云函数,人人都能编写和发布自己的API接口
-
你只需编写简单的云函数,就可以实现自己的业务逻辑,发布后就可以生成自己的接口给客户端调用。果创云支持对云函数进行在线接口编程,进入开放平台我的接口-在线接口编程,设计一个新接口,设计和配置好接口参...
- 极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:iN在之前和大家说过,在iN的家里是没有墙面开关的。...
- window使用curl命令的注意事项 curl命令用法
-
cmd-使用curl命令的注意点前言最近在cmd中使用curl命令来测试restapi,发现有不少问题,这里记录一下。在cmd中使用curl命令的注意事项json不能由单引号包括起来json...
- Linux 系统curl命令使用详解 linuxctrl
-
curl是一个强大的命令行工具,用于在Linux系统中进行数据传输。它支持多种协议,包括HTTP、HTTPS、FTP等,用于下载或上传数据,执行Web请求等。curl命令的常见用法和解...
- Tornado 入门:初学者指南 tornados
-
Tornado是一个功能强大的PythonWeb框架和异步网络库。它最初是为了处理实时Web服务中的数千个同时连接而开发的。它独特的Web服务器和框架功能组合使其成为开发高性能Web...
- PHP Curl的简单使用 php curl formdata
-
本文写给刚入PHP坑不久的新手们,作为工具文档,方便用时查阅。CURL是一个非常强大的开源库,它支持很多种协议,例如,HTTP、HTTPS、FTP、TELENT等。日常开发中,我们经常会需要用到cur...
- Rust 服务器、服务和应用程序:7 Rust 中的服务器端 Web 应用简介
-
本章涵盖使用Actix提供静态网页...
- 我给 Apache 顶级项目提了个 Bug apache顶级项目有哪些
-
这篇文章记录了给Apache顶级项目-分库分表中间件ShardingSphere提交Bug的历程。说实话,这是一次比较曲折的Bug跟踪之旅。10月28日,我们在GitHub上提...
- linux文件下载、服务器交互(curl)
-
基础环境curl命令描述...
- curl简单使用 curl sh
-
1.curl--help#查看关键字2.curl-A“(添加user-agent<name>SendUser-Agent<name>toserver)”...
- 常用linux命令:curl 常用linux命令大全
-
//获取网页内容//不加任何选项使用curl时,默认会发送GET请求来获取内容到标准输出$curlhttp://www.baidu.com//输出<!DOCTYPEh...
- 三十七,Web渗透提高班之hack the box在线靶场注册及入门知识
-
一.注册hacktheboxHackTheBox是一个在线平台,允许测试您的渗透技能和代码,并与其他类似兴趣的成员交流想法和方法。它包含一些不断更新的挑战,并且模拟真实场景,其风格更倾向于CT...
- 一周热门
- 最近发表
-
- 好用的云函数!后端低代码接口开发,零基础编写API接口
- 快速上手:Windows 平台上 cURL 命令的使用方法
- 使用 Golang net/http 包:基础入门与实战
- #小白接口# 使用云函数,人人都能编写和发布自己的API接口
- 极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关
- window使用curl命令的注意事项 curl命令用法
- Linux 系统curl命令使用详解 linuxctrl
- Tornado 入门:初学者指南 tornados
- PHP Curl的简单使用 php curl formdata
- Rust 服务器、服务和应用程序:7 Rust 中的服务器端 Web 应用简介
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- patch补丁 (31)
- strcat (25)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- element style (30)
- dedecms模版 (53)
- vs打不开 (29)
- nmap (30)
- webgl开发 (24)
- parse (24)
- c 视频教程下载 (33)
- paddleocr (28)
- listview排序 (33)
- firebug 使用 (31)
- transactionmanager (30)
- characterencodingfilter (33)
- getmonth (34)
- commandtimeout (30)
- hibernate教程 (31)
- label换行 (33)
- curlpost (31)