搞清楚,string和char的区别,在使用如下初始化时:
string _s(t,' ');
一定是单引号,而不是双引号!!!
在使用erase()函数时一定要使用如下形式:
for (auto i = s_new.begin(); i !=s_new.end();)
{
if (*i == ' ')
{
i=s_new.erase(i);
}
else
{
i++;
}
}
当然,使用int i也可以但是需要修改一下:
for (int i = 0; i < s_new.size(); i++)
{
if (int(s_new[i]) == int(' '))
{
s_new.erase(i, 1);
i--;//因为erase()在使用后,会自动帮你的迭代变量i加1;
//另外注意在string中,erase中索引可以是整数,可以是迭代器变量;
//如果是迭代器的话,则erase(it_begin, it_end);
//如果是整数的话,则erase(i, num); 第一个变量是string[i],第二个是需要删除的个数。
}
}
Leetcode(6) 6. ZigZag Conversion
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string make_full(string s, int column)
{
int t = (2 * column - 2) - s.size() % (2 * column - 2);
if (s.size() % (2*column-2))
{
//string m(" ",10);
string _s(t,' ');
s.insert(s.size(), _s);
}
return s;
}
string solve(string s, int column, string s_new)
{
string _s="";
string subs;
int t = 2 * column - 2;
int times = s.size() / t;
int base_area = column - 1;
for (int i = 1; i <= column-2; i++)
{
subs = "";
for (int j = 0; j < times; j++)
{
subs += s[base_area - i + j * t];
subs += s[base_area + i + j * t];
}
_s.insert(0, subs);
}
s_new.append(_s);
for (int i = 0; i < times; i++)
{
subs = s[i*t + column - 1];
s_new.append(subs);
}
return s_new;
}
string delete_space(string s_new)
{
for (auto i = s_new.begin(); i !=s_new.end();)
{
if (*i == ' ')
{
i=s_new.erase(i);
}
else
{
i++;
}
}
return s_new;
}
int main(int argc, char* arg[])
{
int column;
string s;
string s_new;
s = arg[1];
column = atoi(arg[2]);
s = make_full(s, column);
for (int i = 0; i < (s.size()) / (2 * column - 2); i++)
{
s_new.push_back(s[i*(2 * column - 2)]);
}
s_new = solve(s, column, s_new);
s_new = delete_space(s_new);
cout << s_new;
//cout << int(" ");
system("pause");
return 0;
}