codewars里的题目,要实现一个solution函数,完成功能如下:
solution("abc") // should return {"ab", "c_"}
solution("abcdef") // should return {"ab", "cd", "ef"}
输入的是string类型,返回值是vector<string>类型
自己在实现的时候,因为不会高级函数,所以想的很简单,就遍历字符串,过程中每两个字符打包为一个字符串,push_back到名为res的vector中。
但实现过程中遇到了问题,问题在于虽然s是个string类型(双引号""),但遍历的时候每个s[i]都是char类型(单引号’’),但char类型实际上是int类型。所以在res.push_back(s[i])的时候就会报错,因为res是个vector<string>。所以只能接收string,char/int是不行的。
下面是我写的,有问题。没必要仔细看,只是说明这个错误的来源。
#include<iostream>
#include <string>
#include <vector>
using namespace std;
std::vector<std::string> solution(const std::string &s)
{
//unsigned count = 0;
vector<std::string> res;
for (int i = 0; i < s.size(); i++)
{
if (s.size()%2==0)//偶数个元素
{
if (i%2==0)
{
res.push_back(s[i]+s[i+1]);//此处有问题
}
}
else//奇数个元素
{
if (i%2==0 && i!=s.size()-2)
{
res.push_back(s[i]+s[i+1]);//有问题
}
else if (i == s.size()-2)
{
res.push_back(s[i+1]+"_");//问题
}
}
}
return res; // Your code here
}
int main()
{
string s = "abcdef";
system("pause");
vector<std::string> res;
res = solution(s);
for (auto i : res)
{
cout << i << " ";
}
cout << endl;
return 0;
}
后面我就看了别人的做法:
std::vector<std::string> solution(const std::string &s) {
std::vector <std::string> res;
for (int i = 0; i < s.length(); i += 2)
res.push_back(s.substr(i, 2));
if (s.length() % 2)
res[res.size() - 1] += "_";
return res;
}
用了一个substr()就解决了,s.substr(i, 2)表示在字符串s中从索引i位置开始取长度为2的子字符串。