String相关操作
1.求字符串中连续出现最多的字串
pair<string, int> substring(const string& str)
{
int i, j, k, len = str.length(), count, maxcount = ;
string substr;
vector<string> substrs; //存储所有的子字符串
for ( i = ; i < len; ++i)
{
substrs.push_back(str.substr(i, len - i));
} for ( i = ; i < len; ++i)
{
for ( j = i + ; j < len; ++j)
{
count = ;
if (substrs[i].substr(,j-i)==substrs[j].substr(,j-i))
{
++count;
for (k = j + (j - i); k < len; k += j - i)
{
if (substrs[i].substr(, j - i) == substrs[k].substr(, j - i))
{
++count;
}
else
break;
}
if (count>maxcount)
{
maxcount = count;
substr = substrs[i].substr(, j - i);
}
}
}
} return make_pair(substr, maxcount);
}
大致理解,但是有没有更佳的解法呢?
2.求字符串中出现的相同且长度最长的字符串,输出首字符的位置
pair<string, int> substring(const string& str)
{
string substr{""};
int i, j, left, right, len = str.length(); for (i = len - ; i > ; --i)
{
for ( j = ; j < len; ++j)
{
if (j + i < len)
{
left = right = ;
substr = str.substr(j, i); left = str.find(substr);
right = str.rfind(substr); if (left!=right)
{
return make_pair(substr,left);
}
}
else
break;
}
} return make_pair(substr,);
}
从大字符串进行拆分,两边结合搜索比将所有子字符串拆分寻找效率高。
至于调用库函数,是比较方便的选择。
3.重写strstr,且返回朱传忠字符子串位置以后的所有字符
const char* strstr_(const char* src,const char* substr)
{
const char* tmp;
while (*src!='')
{
if (*src==*substr)
{
tmp = substr;
while (*src++==*tmp++)
{
if (*tmp=='\0')
{
return src;
}
}
}
else
*src++;
} return nullptr;
}
注意其中为什么使用tmp代替字串,因为可能会重复比较,所以需要字串的值持续存在。
3.将字符串中的单词进行倒置,标点符号不倒换。“i come from nanjing!”->"nanjing! from come i".
void transfer(char* dst,const char* src)
{
bool sign = false;
int i, j, k, left, right, num = , len = strlen(src); for ( i = ; i <= len ; i++)
{
if (' ' != src[i] && '\0' != src[i]) //排除空格
{
if (sign)
{
right++;
}
else
{
sign = true;
left = right = i;
}
}
else
{
if (sign)
{
sign = false;
dst[len -- i] = src[i];
for ( j = left, k = len--right; j <= right; j++, k++)
{
dst[k] = src[j];
}
left = right = ;
}
else
{
dst[len- - i] = src[i];
}
}
}
}
个人觉得比程序员面试宝典的方法更为简洁,不过其方法较容易操作。后续可以补上程序员面试宝典上的操作。
4.程序员面试宝典上一道填空题,移动字符串内容,将字符串的倒数n个字符移动到字符串前面,仅能在while中填空
void righttransfer(char *str,int n)
{
int i = 0, len = strlen(str);
if (n > len) n = len; while (len - n > 0 || (n = 0) != 0)
{
for (i = 0, str[len] = str[0], ++n; i < len; i++)
str[i] = str[i + 1];
} str[len - n] = '\0';
}
这里面的巧妙之处就在于(n = 0) != 0操作,当字符串移动结束,最后一位'\0'因为移动被字符覆盖了,现在需要重新赋值。
而n已经被修改了,这时候就要重新初始化了,利用||特性,前面为真时直接跳过,此时移动到结尾,len-n为false,则跳到后半部分。
n被赋值为0,即n!=0操作为false,跳出循环,完美。
String相关操作的更多相关文章
- 路径打印(set以及字符串的相关操作)
题目链接 题目描述 给你一串路径,譬如: a\b\c a\d\e b\cst d\ 你把这些路径中蕴含的目录结构给画出来,子目录直接列在父目录下面,并比父目录向右缩一格,就像这样: a b ...
- redis对string进行的相关操作
redis对string类型操作的相关命令以及如何在python使用这些命令 redis对string类型操作的命令: 命令 语法 概述 返回值 Redis SET 命令 set key value ...
- php对二维数组进行相关操作(排序、转换、去空白等)
php对二维数组进行相关操作(排序.转换.去空白等) 投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-11-04 这篇文章主要介绍了php对二维数组进行相关操作,包括php对 ...
- DataTable相关操作,筛选,取前N条数据,获取指定列数据
DataTable相关操作,筛选,取前N条数据,获取指定列数据2013-03-12 14:50 by Miracle520, 2667 阅读, 0 评论, 收藏, 编辑 1 #region DataT ...
- 从零自学Hadoop(24):Impala相关操作上
阅读目录 序 数据库相关 表相关 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 ...
- JAVA基础5——与String相关的系列(1)
与String相关的系列 String, 是JAVA中常见的一个引用类型,且其具有一定的特殊性. String类型被设置为final型,即不可继承,也就不可修改其中的实现. String可以改变吗 S ...
- 利用JAVA API远程进行HDFS的相关操作
学习HDFS有一段时间了,现在把自己总结的HDFS的相关操作代码展示给大家. 主要有HDFS的增删改查,文件的追加,windows本地文件的上传,hdfs文件的下载,文件重命名,创建目录,文件是否存在 ...
- LayUI之table数据表格获取行、行高亮等相关操作
前言 目前LayUI数据表格既美观有不乏一些实用功能.基本上表格应有的操作已经具备,LayUI作者[贤心]肯定是煞费苦心去优化,此处致敬.但是实话实话,如果单纯那数据表格功能来说,EasUI的数据表格 ...
- Map集合中,关于取值和遍历的相关操作
这是自己的关于map集合的相关操作的小研究,分享给大家. 主要代码内容包含以下: 1,map集合的遍历 2,根据key值获取value值 3,根据value值获取key值 4,返回最大value值对应 ...
随机推荐
- Dom选择器及操作文本内容
文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关心的是,DOM把 ...
- css之opacity
设置div元素的不透明级别 语法: value :从0.0(完全透明)到1.0(完全不透明) inherit:应该从父元素继承opacity属性 z-index 属性设置元素的堆叠顺序,仅能在定位元素 ...
- Knockout应用开发指南(完整版) 目录索引
http://learn.knockoutjs.com/ 所有示例和代码都在在上面直接运行预览 注意:因为它用了google的cdn加速,所要要用代_理+_翻_墙才能正常加载 使用Knockout有 ...
- final,static
如果输入参数在方法体执行过程中,强制不能被修改,那么参数类型前加final比较安全. final修饰的函数会被编译器优化,优化意味着编译器可能将该方法用内联(inline)方式载入.final修饰变量 ...
- 概要设计、详细设计(三)关键点(Know-How)、运用技巧
1. 关键点(Know-How).运用技巧 4.1 设计准则 制定设计准则是概要设计阶段的最主要.最关键的工作.在实际工作中往往忽略,多数项目牺牲在这个环节.制定设计准则着眼于如何更好的做设计, ...
- Java连接Oracle
Process myProcess = Runtime.getRuntime().exec("ipconfig"); InputStreamReader ir = new Inpu ...
- [java]序列化框架性能对比(kryo、hessian、java、protostuff)
序列化框架性能对比(kryo.hessian.java.protostuff) 简介: 优点 缺点 Kryo 速度快,序列化后体积小 跨语言支持较复杂 Hessian 默认支持跨语言 较慢 Pro ...
- 设计师必看的10个HTML5动画工具
如果你想用令人难以置信的动画创建引人注目的网站的话,那么这里为设计师精心挑选了一些必备的HTML5动画工具.HTML5是设计师用来打造时尚网站的最流行的编程语言之一.在过去三年内,这种编程语言的使用人 ...
- Python基础教程【读书笔记】 - 2016/7/14
希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第六波:第2章 列表和元组 [总览] 数据结构,是通过某种方式组织在一起的数据元素的集合,数据元素可以使数字或字符串 ...
- C#调用MySql
1.要连接MySql数据库必须首先下载MySql官方的连接.net的文件,文件下载地址为http://dev.mysql.com/downloads/connector/net/6.6.html#do ...