向高手请问,为什么小弟我的值丢失了

向高手请教,为什么我的值丢失了。
在Topcoder上作题,做第一道题就卡住了。是道类似解码的题,算法部分不难,可具体实现怎么也通不过。
题中要求输入类似“123210122”的字符串Q,解出可能的“011100011”这样的码P。解码规则为Q的每一位等于P相应位加上相邻位的和。我的程序如下:
#include <vector>
#include <string>
#include <iostream>

using   namespace   std;
//题目要求用vector <string> 作为返回值,解码函数为一个类的公共成员//函数
class   BinaryCode{
public:

vector <string>   decode(string   message)
{
vector <string>   r;//存放返回值
string   s=message,c;//s相当于Q,c相当于P
int   n=s.size();
c[0]= '0 ';int   i;//先假设P的第一个字符为‘0’
for(i=1;i <n;i++)
{
                                                //算出每一个c[i]
if(i==1)c[i]=s[i-1]-c[i-1]+ '0 ';
else   c[i]=s[i-1]-c[i-1]-c[i-2]+ '0 '+ '0 ';

                                            //如果得到的c[i]不符合,跳出循环
if(c[i]!= '0 '&&c[i]!= '1 ')break;
}
         

//判断是否可以解出相应的P,不能的话用“NONE”代替。问题也就出在//这里,字符串c中什么都没有,
//cout < <c[0]有值输出
//cout < <c   无输出
cif(i <n||(n==1&&c[0]!=s[0])||(n> =2&&s[i-1]!=(c[i-1]+c[i-2]- '0 ')))
r.push_back( "NONE ");
else   r.push_back(c);

//先假设P的第一个字符为‘1’,出现的问题也是一样的
c[0]= '1 ';
for(i=1;i <n;i++)
{
if(i==1)c[i]=s[i-1]-c[i-1]+ '0 ';
else   c[i]=s[i-1]-c[i-1]-c[i-2]+ '0 '+ '0 ';
if(c[i]!= '0 '&&c[i]!= '1 ')break;
}
if(i <n||(n==1&&c[0]!=s[0])||(n> =2&&s[i-1]!=(c[i-1]+c[i-2]- '0 ')))
r.push_back( "NONE ");
else     r.push_back(c);
return   r;
}
};

我才开始学习C++标准库,不知道是不是哪里用的不对,这问题出得太打击人了,值怎么会消失呢。还请高手们多多指教啊,新手分少,不过解决了一定给分。谢谢啊!




------解决方案--------------------
string c;
没有给c分配存储空间,要向c中添加字符, 可用c.push_back();
下标操作符[i]只有才i> =0 且i <c.size()时才有效.

调用c.resize(n)后, c.size()=n, 就可以用c[i]操作了.

多看看书吧:)