c语言字符串中取最大字符串,使用C语言提取子字符串及判断对称子字符串最大长度...

先来看一个使用C语言从字符串中提取子字符串的基本方法总结:

#include

/*处理中文字符*/

/*遍历字符串,非ASCII字符读取2个字节,ASCII读取一个字节,获取字符串长度*/

int StrLenU(const char* string)

{

int len = 0 ;

const char* p = string;

while(*p++ != '\0')

{

if(*p > 0x80 || *p < 0)

{

p++;

}

len++;

}

return len;

}

/*遍历字符串,非ASCII字符读取2个字节,ASCII读取一个字节,返回指定位置的字符串指针,默认从1开始*/

char* StrSetPosU(const char* string,int pos)

{

char* result;

result = string;

while (result != NULL && *result != '\0' && pos > 1)

{

if(*result > 0x80 || *result < 0)

{

result++;

}

result++;

pos--;

}

if(pos!=0)

return result;

return '\0';

}

/*获取指定内存中的字符串个数,中文字符作为一个字符*/

int StrLenMemU(const char* string,int size)

{

int len = 0 ;

const char* p = string;

while(*p++ != '\0' && size > 0)

{

if(*p > 0x80 || *p < 0)

{

p++;

size--;

}

size-- ;

len++;

}

return len;

}

/*可取中文字符串,当number为-1等负数时,取从start开始的剩余所有字符,默认从1开始*/

char* StringSubU(const char* string,int start,int number)

{

int len = StrLenU(string) ;

if(start>len)

{

printf("Start %d is too big than string length %d!\n",start,len);

return NULL;

}

int bufsize = 0;

int num = number;

const char* p = string;

const char* start_char =string;

/*重置指针,获取指定开始位置*/

p = StrSetPosU(string,start);

start_char = p;

/*当取值为负值时,则取全部值*/

if(number < 0)

{

while(*p != '\0')

{

p++;

bufsize++;

}

}

else

{

while(1)

{

/*当指针移到末尾,而且还没有获取指定数的字符时,说明此时指定字符数过多,将会取剩下的所有值*/

if(*p == '\0' && num > 0)

{

printf("Number : %d is to big!\n",number);

break;

}

/*当num为0时,说明读取字符已经满足要求*/

else if(num ==0 )

break;

/*当字符为ASCII时,*/

if(*p > 0x80 || *p < 0)

{

bufsize++;

p++;

}

bufsize++;

p++;

num--;

}

}

num = bufsize;

/*开始分配内存*/

char* result ;

result = (char*)malloc(sizeof(char)*(bufsize+1));

memset(result,0,sizeof(char)*(bufsize+1));

/*开始复制字符串*/

int i = 0;

int j = 0;

while(num != 0)

{

result[i++] = start_char[j++];

num--;

}

/*尾部置零*/

result[bufsize] = '\0';

return result;

}

int main()

{

/*进行测试*/

char* t = "a哈哈aab和c哈";

printf("length: %d\n",StrLenU("哈哈a哈a哈"));

printf("指向前%s\n指向后:%s\n",t,StrSetPosU(t,3));

printf("全字符时字符个数:%d\n",StrLenMemU(t,6));

printf("半个字符时字符个数:%d\n",StrLenMemU(t,4));

printf("1.正常取值:%s\n",StringSubU("a哈aa哈a",1,2));

printf("2.负值取值:%s\n",StringSubU("a哈aa哈a",-1,2));

printf("3.起始值过大:%s\n",StringSubU("a哈aa哈a",7,2));

printf("4.取值过大:%s\n",StringSubU("a哈aa哈a",5,3));

printf("5.负值取全部:%s\n",StringSubU("a哈aa哈a",4,-1));

return 0;

}

判断对称子字符串最大长度的方法

判断回文先重写一个判断回文字串的方法,用指针实现,而不是数组了

#include

#include

#include

void isSymmetrical(char *str)

{

char *begin, *end;

int flag, len = strlen(str);

for (begin = str, end = str + len - 1, flag = 1; begin <= end; begin ++, end --) {

if (*begin != *end) {

flag = 0;

break;

}

}

if (flag)

printf("Yes!\n");

else

printf("No!\n");

}

int main(void)

{

char str[1001];

while (gets(str)) {

isSymmetrical(str);

}

return 0;

}

/**************************************************************

Problem: 1192

User: wangzhengyi

Language: C

Result: Accepted

Time:10 ms

Memory:912 kb

****************************************************************/

判断回文子串判断子串是否为回文,可以考虑从内向外比较。例如字符串“google”,如果我们判断第二个字符o是对称的,只需要再向左、和向右各移一位就可以判断下一个字符串是否是对称的了

需要注意的一点是,针对原字符串中的每一个字符有两种情况:

以该字符为中心的对称分布,也就是回文子串为奇数

以该字符和该字符前一个字符为中心的对称分布,也就是说回文子串是偶数

时间复杂度分析:

外层需要n - 1层循环,内层对于每个字符,都由中间向两边遍历一遍,为n,因此总的时间复杂度为O(n * n)

题目

题目描述:

输入一个字符串,输出该字符串中对称的子字符串的最大长度。

比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。

输入:

存在多组数据,每组数据一行字符串,长度不大于100。

输出:

输出回文子串的最大长度。

样例输入:

google

样例输出:

4

ac代码

#include

#include

#include

/**

* 最长回文字串的长度

*/

void maxSymmetricalSubstring(char *str)

{

int maxlength, len;

char *pre, *next, *current;

current = str + 1;

maxlength = 0;

while (*current != '\0') {

pre = current - 1;

next = current + 1;

while (pre >= str && *next != '\0' && *pre == *next) {

pre --;

next ++;

}

len = (next - 1) - (pre + 1) + 1;

if (len > maxlength) {

maxlength = len;

}

pre = current - 1;

next = current;

while (pre >= str && *next != '\0' && *pre == *next) {

pre --;

next ++;

}

len = (next - 1) - (pre + 1) + 1;

if (len > maxlength) {

maxlength = len;

}

current ++;

}

printf("%d\n", maxlength);

}

int main(void)

{

char str[101];

while (gets(str)) {

maxSymmetricalSubstring(str);

}

return 0;

}

/**************************************************************

Problem: 1252

User: wangzhengyi

Language: C

Result: Accepted

Time:0 ms

Memory:912 kb

****************************************************************/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构——用栈解决回文字符问题

回文 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文&#xff0c;但“good”不是回文。试写一个算法判定给定的字符序列是否为回文。&#xff08;提示&#xff1a;将一半字符入栈。&#xff09; 所需的知识前提&#xff1a;栈 以下是顺序栈的基本算法 结构…

aspose excel中文文档_除了VBA,还有哪些编程语言可以操作Excel文件?

Excel(Microsoft office)是现在最常用的办公软件&#xff0c;主要涉及电子表格制作、数据处理、报表输出展示以及更高端的还有金融建模等&#xff1b;我们知道&#xff0c;在需要批处理多个Excel工作表以及工作簿的时候&#xff0c;需要用到一个自动化的利器&#xff1a;VBAVBA…

关于.NET5在IIS中部署的几个问题总结

本来我的系列教程已经慢慢剥离开IIS了&#xff0c;毕竟有了Docker容器以后&#xff0c;配合Nginx使用真的很不错。但是还是有很多同学使用IIS的&#xff0c;这个不可否认IIS的重要性。随着.NET的发布&#xff0c;很多小伙伴已经开始升级了&#xff0c;我也就陆陆续续收到了一些…

上海市二级c语言软件环境,上海市计算机二级C语言复习资料 word整理版.doc

上海市高等学校计算机等级考试二级(C程序设计)03年上海市高等学校计算机等级考试试卷二级 (C程序设计)(本试卷答卷时间为120分钟)试题一(28分&#xff0c;每小题4分)解答下列各小题&#xff0c;把正确的解答写在答卷纸的对应栏内。设有变量说明&#xff1a;int a5,b4,c3,r1,r2;…

数据结构——括号匹配问题

括号匹配 给定一个字符串&#xff0c;其中的字符只包含三种括号&#xff1a;花括号{ }、中括号[ ]、圆括号( )&#xff0c;即它仅由 “( ) [ ] { }” 这六个字符组成。设计算法&#xff0c;判断该字符串是否有效&#xff0c;即字符串中括号是否匹配。括号匹配要求括号必须以正…

wordpress多站点主站调用分站最新文章_企业网站SEO最新的7个优化步骤!

如果你是一个企业主&#xff0c;你有建立企业官方网站的经验&#xff0c;在2-3年的运作中&#xff0c;我相信你至少修改了一个网站&#xff0c;甚至做了一个重大的SEO策略调整。当我们开始建立一个公司的时候&#xff0c;很多时候就是认为只要我们有一个公司的网站&#xff0c;…

c语言sizeof和strlen哪个大,C语言的sizeof和strlen区别与联系

sizeof指的是占有空间的大小&#xff0c;包括字符串结束的\0。strlen是计算字符串长度&#xff0c;以\0作为结束标志&#xff0c;并且\0不计入数值。#include #include using namespace std;void fun(char a[100]){cout << sizeof(a) << endl;// 参数里的数组也是按…

数据结构——进制转换(10—n)

进制转换&#xff08;10进制——n进制&#xff09; 所需知识&#xff1a;栈 #include<stdio.h> #include<bits/stdc.h> using namespace std; #include<malloc.h> #include<string>typedef int Status; #define OK 1 #define ERROR 0 #define TRUE 1…

Azure 静态 web 应用集成 Azure 函数 API

前几次我们演示了如何通过Azure静态web应用功能发布vue跟blazor的项目(使用 Azure静态web应用Github全自动部署VUE站点、使用Azure静态Web应用部署Blazor Webassembly应用)。但是一个真正的web应用&#xff0c;总是免不了需要后台api服务为前端提供数据或者处理数据的能力。同样…

c++ new一个结构体_C语言结构体,又一个纸老虎,纯干货讲解(附代码)

来源&#xff1a;网络&#xff0c;排版整理&#xff1a;晓宇微信公众号&#xff1a;芯片之家(ID&#xff1a;chiphome-dy)结构体的定义结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合&#xff0c;也叫结构。结构体和其他类型基础数据类型一样&#xff0c…

c语言next的用法,C语言strchr使用之Next查找和截断想要的字符串

#include #include #include #include #include #include #include #include static char pstring[] "Hello\n"; // 这里不能是char*int main(){char tmp ;char* pstr strchr(pstring,‘l‘);printf("pstr is %s %p\n",pstr,pstr);#if 0// 搜后面的pstr …

problem b: 十进制整数转二进制_二进制的科学计数法?白话谈谈计算机如何存储与理解小数:IEEE 754...

浮点数的计算机表示(IEEE 754)&#xff0c;由 UCB 数学教授 William Kahan 主要起草。后者也因其卓越贡献于1989年获得图灵奖。计算机组成原理与汇编语言这两门课均对该内容有所讲解。与课程中直接抛出公式与概念不同&#xff0c;我想首先与各位探讨"科学计数法"这个…

分享我的写作经验

大家好&#xff0c;我是Z哥。最近一段时间&#xff0c;我面基了几个在微信上聊得不错的小伙伴。和其中的两位有聊到关于写作的事情。概括地说就是他们也想写写博客、公众号&#xff0c;但是感觉无从下手。我和他们分享了我的一些经验&#xff0c;在这里做一下总结和补充&#x…

数据结构——二叉树的最小深度算法

给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明&#xff1a;叶子节点是指没有子节点的节点。 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;2 示例 2&#xff1a; 输入&#xff1a;root …

开发板实现645协议C语言,迅为-imx6ull开发板之C语言实现LED例程

第九章我们使用汇编编写了 LED 灯的实验&#xff0c;在实际开发过程中大部分还是使用 C 语言&#xff0c;汇编只是用来完成 C 语言环境的初始化&#xff0c;本章我么就来实现用汇编完成 C 语言环境的初始化&#xff0c;然后用 C 语言实现 LED 的例程。10.1 C 程序版LED例程简介…

解锁环境变量在云原生应用中的各种姿势

应用程序在某些时刻总是需要一些外挂配置&#xff0c;云原生应用的实践是在容器化之前就将应用程序配置保留在代码之外。“12-Factors App&#xff1a;Store config in the environment① 外挂配置文件&#xff1a;业务配置 appsettings.json“可以在代码中要求加载appsetting.…

python字符串截取方法_如何使用python语言中的字符串方法截取字符串

在我们使用python语言中的字符串方法时&#xff0c;可能会判断某个字符串是否以什么开头&#xff0c;可以使用什么进行截取等。下面利用几个实例说明字符串中的方法的用法&#xff0c;操作如下&#xff1a;工具/原料 python 截图工具 方法/步骤 1 第一步&#xff0c;打开python…

数据结构——二叉树的层次遍历

问题描述&#xff1a; 给你一个二叉树&#xff0c;请你返回其按 层序遍历 得到的节点值。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例&#xff1a; 二叉树&#xff1a;[3,9,20,null,null,15,7] 返回其层次遍历结果&#xff1a; [ [3], [9,…

asp.net core 使用 TestServer 来做集成测试

asp.net core 使用 TestServer 来做集成测试Intro之前我的项目里的集成测试是随机一个端口&#xff0c;每次都真实的启动一个 WebServer&#xff0c;之前也有看到过微软文档上 TestServer 的介绍&#xff0c;当时没仔细看过以为差不多就没用&#xff0c;一直是启动了一个真正的…

python os system_python中os. popen system的区别

python调用Shell脚本或者是调用系统命令&#xff0c;有两种方法&#xff1a; os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码&#xff0c;正确会返回0&#xff0c;错误会返回其他数字。 后者的返回值是脚本执行过程中的输出内容。实际使用时视需求情况而选择。 p…