7-32 说反话-加强版

img


我的思路是:定义a[500000]、temp[500000]、final[500000]三个数组,a用来存放最开始的字符串,temp把a中多余的空格去掉,变成只有一个空格的句子形式,vector数组final的每个单元都存放一个单词,按句子倒序的单词顺序,依次存放在final[0]到final[n-1],最后把final的单词输出,为什么运行不了并且无法输入呢?


#include <iostream>
#include <vector>
#include <cstring>
using namespace std;

int main()
{
    vector<char> final[500000];
    char a[500000];
    char temp[500000];
    cin.getline(a, 500000);
    int len = (int)strlen(a);
    
    int loca = 0;
    int loct = 0;
    int locf = 0;
    for(; loca < len;)
    {
        while(a[loca] == ' ')
        loca++;
        
        temp[loct] = a[loca];
        loca++;
        loct++;
        
        if(a[loca] == ' ')
        {
            temp[loct] = ' ';
            loct++;
        }
    }
    loct--;
    int pro;
    int end;
    
    pro = loct;
    end = loct;
    
    while(pro >= 0)
    {
            //pro定位到单词开头字母 
        while(temp[pro] == ' ')
        pro--;
        if(pro >= 0)
        {
            while(temp[pro] != ' ')
            pro--;
            pro++;
        
        }
        
        //end定位到单词结尾字母
        end = pro;
        while(temp[end] != ' ')
        end++;
        end--;
        
        for(int i = pro; i <= end; i++)
        {
            final[locf].push_back(temp[i]);
        }
        
        locf++;
        pro--;
    }
    
    if(final[locf].empty())
    locf--;
    
    for(int i = 0; i <= locf; i++)
    {
        for(int j = 0; j < (int)final[i].size(); j++)
        {
            cout << final[i][j];
        }
        if(i != locf)
        cout << "#";
    }
    
    
    return 0;
}