寒假填空训练一1010删字母(滚动数组或replace(进行string的删除)),学习一下string的replace以及string的相加
2018-03-10 16:12
429 查看
敲黑板:replace是<cstring>内的函数 有很多的用法我就先掌握一下
想知道其他的 传送门-> replace 详解
replace(size_tpos,size_tlen,const string &str)
用str替换指定字符串 从起始位置pos开始 长度为len的字符
举例:
int main()
{
string line="this@ is@ a test string!";
line=line.replace(lin.find("@"),1,"");
cout<<line<<endl;
}
运行结果:
this is@ a test string! //第一个@就没了
接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。
答案是一个小写字母,不要填写任何多余的内容。
第一种用replace#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int temp;
string s="abcdefghijklmnopqrs";
string ss;
for(int i=0;i<106;i++)//拼接106次
ss+=s;
while(ss.length()>1)
{
for(int i=0;i<ss.length();i++)//在这里需要解释一下为啥是i++
{
// 每次 str删掉一个字符后原先的字符的位置就已经发生了改变 所以i++ 所得到的位置就是未进行删减之前的正确位置
ss.replace(i,1,"");
// cout<<ss.length()<<endl; 从这条语句中发现每次运行过上面一条语句 ss的长度已经发生了改变
}
}
cout<<ss;
return 0;
}
第二种我自己想出来的,由于自己不会用STL 中的vector来维护数组,所以我用了两个 数组来表示进行每次删减后的数组
在这里,我用123456....19来替代 ab... s int数组我感觉比那个 char 还有string 好操作
#include<iostream>
using namespace std;
int a[2015];//要进行删减的数组
int b[2015];//保存删减之后 然后再把b数组赋值给 a数组 再对a 数组进行操作
int c[20];
int main()
{
for(int i=1;i<20;i++)
c[i]=i;
int t=0;
for(int i=1;i<=105;i++)//105的串接 之前就已经有了一次
{
for(int j=1;j<=19;j++)
{
t=i*19+j;
a[t]=c[j];
}
}
int flag=2014;//一开始一共就 2014个
while(flag!=1)//当只 剩下一个的时候 是循环退出的条件
{
int k=1;
for(int i=1;i<=flag;i++)//如果是 奇数的话 就把a[i] 标记成0 否则就存入b[k++]数组中
{
if(i%2==1)
a[i]=0;
else
b[k++]=a[i];
}
for(int i=1;i<k;i++)// 把b 数组赋值到a 数组中
{
cout<<b[i]<<" ";
a[i]=b[i];
}cout<<endl;
if(flag%2==0)//对 flag 进行更新,
{
flag/=2;
}
else
{
flag=(flag+1)/2-1;
}
}
cout<<a[1]<<endl;
return 0;
}
想知道其他的 传送门-> replace 详解
replace(size_tpos,size_tlen,const string &str)
用str替换指定字符串 从起始位置pos开始 长度为len的字符
举例:
int main()
{
string line="this@ is@ a test string!";
line=line.replace(lin.find("@"),1,"");
cout<<line<<endl;
}
运行结果:
this is@ a test string! //第一个@就没了
Problem Description
把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。
答案是一个小写字母,不要填写任何多余的内容。
Input
无Output
输出一个小写字母第一种用replace#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int temp;
string s="abcdefghijklmnopqrs";
string ss;
for(int i=0;i<106;i++)//拼接106次
ss+=s;
while(ss.length()>1)
{
for(int i=0;i<ss.length();i++)//在这里需要解释一下为啥是i++
{
// 每次 str删掉一个字符后原先的字符的位置就已经发生了改变 所以i++ 所得到的位置就是未进行删减之前的正确位置
ss.replace(i,1,"");
// cout<<ss.length()<<endl; 从这条语句中发现每次运行过上面一条语句 ss的长度已经发生了改变
}
}
cout<<ss;
return 0;
}
第二种我自己想出来的,由于自己不会用STL 中的vector来维护数组,所以我用了两个 数组来表示进行每次删减后的数组
在这里,我用123456....19来替代 ab... s int数组我感觉比那个 char 还有string 好操作
#include<iostream>
using namespace std;
int a[2015];//要进行删减的数组
int b[2015];//保存删减之后 然后再把b数组赋值给 a数组 再对a 数组进行操作
int c[20];
int main()
{
for(int i=1;i<20;i++)
c[i]=i;
int t=0;
for(int i=1;i<=105;i++)//105的串接 之前就已经有了一次
{
for(int j=1;j<=19;j++)
{
t=i*19+j;
a[t]=c[j];
}
}
int flag=2014;//一开始一共就 2014个
while(flag!=1)//当只 剩下一个的时候 是循环退出的条件
{
int k=1;
for(int i=1;i<=flag;i++)//如果是 奇数的话 就把a[i] 标记成0 否则就存入b[k++]数组中
{
if(i%2==1)
a[i]=0;
else
b[k++]=a[i];
}
for(int i=1;i<k;i++)// 把b 数组赋值到a 数组中
{
cout<<b[i]<<" ";
a[i]=b[i];
}cout<<endl;
if(flag%2==0)//对 flag 进行更新,
{
flag/=2;
}
else
{
flag=(flag+1)/2-1;
}
}
cout<<a[1]<<endl;
return 0;
}
相关文章推荐
- 蓝桥杯寒假训练二1005 DFS以及三重循环的问题出在memset不能对1进行赋值
- Java学习之训练---求数组的交集、并集以及只在A数组中出现的子串集合
- Caffe_Windows学习笔记(五)用训练好的caffemodel来进行分类
- web前端之localStorage在缓存中对数组进行存储、获取、删除
- JAVA的数组 && 原始类型和引用类型以及String与int long相互转化 && String与byte[]相互转化
- 编写一个函数,由实参传来一个字符串,统计此字符串中字母,数字,空格,和其他字符的个数,在主函数中输入字符串以及输出上述统计的结果。再考虑将算的的结果放在一个数组中
- 转:浅谈Java中数据在内存中的状态,以及String、StringBuffer、==、equals、数组等问题
- C++反汇编学习笔记7——数组和指针以及他们的寻址
- Tensorflow学习教程------利用卷积神经网络对mnist数据集进行分类_利用训练好的模型进行分类
- Git与GitHub学习笔记(三).gitignore文件忽略和删除本地以及远程文件
- mysql删除字段中不是数组英文字母打头的数据
- Android学习 之 Bitmap Drawable byte[] 三者之间的转换以及把数组存入数据库及提取数据重新组合成所需对象,如图像
- 深度学习-CAFFE利用CIFAR10网络模型训练自己的图像数据获得模型-4应用生成模型进行预测
- ArrayList ,string , string[] 数组的转换 以及二维数组定义ArrayList<String[]>
- Day 3 学习使用了数组以及JAVA的Random类
- C++ 学习笔记(3)命名空间using、字符串、string、vector、迭代器、数组
- string代替char数组的输入输出以及利用getline每次读取一行字符串
- 从jQuery.camelCase()学习string.replace() 函数学习
- 编写程序,测试字符串“你好,欢迎来到Java世界”的长度,将字符串的长度转换成字符串进行输出,并对其中的“Java”四个字母进行截取,输出截取字母以及它在字符串中的位置。
- wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString 以及system("command")