百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

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);
}

相关推荐

好用的云函数!后端低代码接口开发,零基础编写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...