//1.字符串替换空格:请实现一个函数,把字符串中的每一个空格替换成“%20”。
//比如输入“we are happy.”。则输出“we%20are%20happy.”。
#include <iostream>
#include <assert.h>
#include <string.h>
using namespace std; char* Grial(char *s)
{
assert(s != NULL);
int len = strlen(s);
int count = 0;//计数空格数。 char *p = s;
while (*p != '\0')
{
if (*p == ' ')count++;
p++;
}
int n = len + count * 2 + 1;
char *str = new char[n];
char *ret = str;
memset(str,'\0',n);
strcpy(str,s);//将原来的字符串复制到新的字符串串数组中。
p = str + n - 1;
char *q = str + len;
while (q < p)
{
if (*q == ' ')
{
*p-- = '0';
*p-- = '2';
*p = '%';
}
else
{
*p = *q;
}
q--;
p--;
}
return ret;
}
int main()
{
char s[] = "we are happy";
cout<<Grial(s)<<endl;
return 0;
} //2.推断一个字符串是否为另外一个字符串旋转之后的字符串。 //比如:给定s1 = AABCD和s2 = BCDAA。返回1,给定s1 = abcd
//和s2 = ACBD。返回0. #include <iostream>
#include <assert.h>
using namespace std;
bool Grial(const char *str1,const char *str2)
{
assert(str1!=NULL&&str2!=NULL);
const char *p = str1;
const char *q = str2 + strlen(str2) - 1;
if (strlen(str1) != strlen(str2))return 0;
while (*p != '\0')
{
if (*p != *q)return 0;
p++;
q--;
}
return 1;
}
int main()
{
char s1[] = "abcd";
char s2[] = "dcba";
cout << Grial(s1, s2) << endl;
return 0;
}*/ //3.定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
//如把字符串 abcdef 左旋转 2 位得到字符串 cdefab。请实现字符串左旋转的函数。 //要求时间对长度为 n 的字符串操作的复杂度 为 O(n), 辅助内存为 O(1)。
#include <iostream>
#include <assert.h>
using namespace std;
void Swap(char *p1,char *p2)
{
char temp;
while (p1 < p2)
{
temp = *p1;
*p1 = *p2;
*p2 = temp;
p1++;
p2--;
}
}
void Grial(char *s,int n)
{
assert(s!=NULL);
int len = strlen(s);
char *p = s + len - 1;
char *q = s;
char *midchar = NULL;
Swap(q,p);//先总体逆序。
midchar = p - n+1;//然后分成两部分逆序。
Swap(q,midchar-1);
Swap(midchar,p);
}
int main()
{
char s[] = "abcdef";
Grial(s, 3);
cout << s << endl;
return 0;
}*/ //4.查找子字符串:模拟strstr函数的实现。
#include <iostream>
#include <assert.h>
#include <string.h>
using namespace std;
int my_atoi(char *p1,char *p2)
{
int count = 0;
while (p1 <= p2)
{
count = count * 10 + *p1 - '0';
p1++;
}
return count;
}
char * my_strstr(char *dist, char *src)
{
int n = strlen(src);
int num1 = my_atoi(src,src+n-1);
int flags = num1 % 13;//标记。
char *p = dist;
char *q;
char *m;
while (p <= dist + strlen(dist) - n)
{
m=p;
if (*p == *src)
{
if (my_atoi(p, p + n - 1) % 13 == flags)
{
q = src;
while (*q != '\0' && *p!='\0')
{
if (*q != *p)break;
q++;
p++;
}
if (*q == '\0')
return m;
}
}
m++;
p=m; }
return NULL; } int main()
{
char s1[] = "123456789";
char s2[] = "789"; cout<<my_strstr(s1, s2)<<endl; return 0;
} //5.模拟实现库函数的atoi函数。
#include <iostream>
#include <assert.h>
using namespace std;
bool IsNum(char ch)
{
if ((ch - '0') >= 0 && (ch - '0') <= 9)return true;
return false;
}
int GetNum(const char *s)
{
const char *p = s;
int count = 0;
while (*p != '\0')
{
if (*p == '.')return count;
if (count<0 )return 2147483647;
count = count * 10 + *p - '0';
p++;
}
} int my_atoi(const char *s)
{
assert(s != NULL);
char ch = *s;
char flags;
if (IsNum(ch))
flags = IsNum(ch) + '0';
else
flags = ch;
const char *p = s + 1; switch (flags)
{
case'+':
return GetNum(p);
break;
case '-':
if (GetNum(p) == 2147483647)
return 0 - GetNum(p) - 1;
return 0 - GetNum(p);
break;
case '1':
return GetNum(s);
break;
default:
exit(2);
}
return 0;
}
int main()
{
cout << my_atoi("-31321312321321") << endl;
return 0;
} #include <iostream>
#include <assert.h>
using namespace std;
//自己实现一个memmove。深入考虑内存覆盖问题。
void* my_memmove(void *dist,void *src,int len)
{
assert(dist!=NULL&&src!=NULL);
char *pdist = (char *)dist;
void *ret = dist;
char *psrc = (char *)src;
if (pdist <= psrc || psrc + len <= pdist)
{
while (len--)
{
*pdist++ = *psrc++;
}
return ret;
}
else
{
pdist += len - 1;
psrc += len - 1;
while (len--)
{
*pdist-- = *psrc--;
}
return ret;
}
}
int main()
{
int a[] = { 2, 3, 4, 65, 1, 6, 7 };
my_memmove(a+1,a,8);
int *b = new int[7];
my_memmove(b,a,16);
int i = 0;
for (; i < 4; i++)
{
cout << b[i] << " ";
}
int i = 0;
for (; i < 7; i++)
{
cout << a[i] << " ";
}
cout << endl;
return 0;
} #include <iostream>
#include <assert.h>
using namespace std; void my_memcopy(void *a,const void *b, int len)
{
assert(a != NULL&&b != NULL);
char *p = (char *)a;
char *q = (char *)b;
while (len--)
{
*p++ = *q++;
}
} int main()
{
int a[] = { 1, 2, 3, 4, 5 };
int *b = new int[5];
my_memcopy(b, a, sizeof(a));
int i = 0;
for (; i < 5; i++)
{
cout << b[i] << endl;
}
memcpy(b,a,100);
return 0;
}

C++字符串操作笔试题第二波的更多相关文章

  1. Python中常见的字符串小笔试题

    1.获取实现两个字符串中最大的公共子串 思路:    1.比较两个字符串的长度 2.获取较短字符串的所有子串 3.使用__contains__函数进行比较 4.把子串当做键,子串长度作为值,存入字典, ...

  2. C#经典笔试题-获取字符串中相同的字符以及其个数

    public Dictionary<char,int> GetStrSameAs(string str){ //将字符串转换成一个字符数组. char[] charArray=str.To ...

  3. .NET面试题解析(03)-string与字符串操作

      系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 字符串可以说是C#开发中最常用的类型了,也是对系统性能影响很关键的类型,熟练掌握字符串的操作非常重要. 常 ...

  4. SQLServer 常见SQL笔试题之语句操作题详解

    SqlServer 常见SQL笔试题之语句操作题详解 by:授客 QQ:1033553122 测试数据库 CREATE DATABASE handWriting ON PRIMARY ( name = ...

  5. 算法笔试题整理——升级蓄水池 && 字符串数字表达式计算值 && 求旅游完所有景点需要的最少天数 && 宝箱怪

    1. 小米笔试题——升级蓄水池 题目描述: 在米兔生活的二维世界中,建造蓄水池非常简单. 一个蓄水池可以用n个坐标轴上的非负整数表示,代表区间为[0-n]范围内宽度为1的墙壁的高度. 如下图1,黑色部 ...

  6. 【笔试题】怎样将 GB2312 编码的字符串转换为 ISO-8859-1 编码的字符串?

    笔试题 怎样将 GB2312 编码的字符串转换为 ISO-8859-1 编码的字符串? import java.io.UnsupportedEncodingException; public clas ...

  7. 从阿里巴巴笔试题看Java加载顺序

    一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...

  8. 也许你需要点实用的-Web前端笔试题

    之前发的一篇博客里没有附上答案,现在有空整理了下发出来,希望能帮助到正在找工作的你,还是那句话:技术只有自己真正理解了才是自己的东西,共勉. Web前端笔试题 Html+css 1.对WEB标准以及w ...

  9. C/C++ 笔试题

    /////转自http://blog.csdn.net/suxinpingtao51/article/details/8015147#userconsent# 微软亚洲技术中心的面试题!!! 1.进程 ...

随机推荐

  1. hdu 2151

    就是一个dp,数组内存的步数, 数组没清空,wa了一次 #include<cstdio> #include<algorithm> #include<cstring> ...

  2. STL_算法_依据第n个元素排序(nth_element)

    C++ Primer 学习中... 简单记录下我的学习过程 (代码为主) //全部容器适用 nth_element(b,n,e) nth_element(b,n,e,p) 对照:partition() ...

  3. 最大似然估计的缺陷 —— 方差和均值的 bias

    0. 均匀分布期望的最大似然估计 首先我们来看,如何通过最大似然估计的形式估计均匀分布的期望.均匀分布的概率密度函数为:f(x|θ)=1θ,0≤x≤θ.不失一般性地,将 x1,x2,-,xn 排序为顺 ...

  4. WebService中使用自定义类的解决方法(5种)

    转自:http://www.cnblogs.com/lxinxuan/archive/2007/05/24/758317.html Demo下载:http://files.cnblogs.com/lx ...

  5. Vmware 安装samba之二

    安装samba:sudo apt-get install samba 安装smbclient:sudo apt-get install 安装smbfs:sudo apt-get smbfs 2.修改配 ...

  6. oracle故障处理之删除大表空间hang住

    背景 数据库分区表数据越来越大,需要对过期话的数据进行迁移,以及大的分区表需要进行数据的清理和删除,达到释放磁盘空间的目的. 问题说明 环境:linux 6.X 数据库:oracle 11.2.0.4 ...

  7. Comparable与Comparator区别(实现和使用)

    一.Comparable接口 1.Comparable接口是什么? 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 . ...

  8. 最简单的启动并连接一个redis的docker容器

    启动一个容器: $ sudo docker run --name <name> -d redis 连接一个容器: sudo docker run -it --link <name&g ...

  9. Mac 安装cmake小问题

    今天用 brew install cmake. ==> Downloading https://homebrew.bintray.com/bottles/cmake-3.9.6.sierra.b ...

  10. 小白向:web中利用request.getPart()上传文件到服务器

    被文件上传弄得焦头烂额的一天,果然web中的路径和各种设置真的好讨厌= = 下面是超级小白的.及其简约的“详”解 1.明确目的: 用户将 1.txt 文件 上传到 服务器(web工程下的某个文件夹)中 ...