-3

我有一个程序创建一个动态 char 数据输入字符串(不允许使用 c++ 字符串),看起来像这样(其中基本上可以是任何其他数据而不是日期,并且没有给出数据块的数量):

2004-01-18|2005-01-18|

我需要对字符串做的是将其拆分为可用于打印的奇异数据块的 2d char 数组。我的代码如下所示:

char** CRegister::Split(char *st, int& parts, int& maxChars) const{

    parts = 0;
    maxChars = 0;
    int maxtmp = 0;
    int j = 0; 

    /* Calculating the number of data blocks in the string */

    while(st[j]){
        if(st[j] == '|'){
            parts++;
        }
        j++;
    }
    j = 0; 

    /* Calculating the longest data block length for array initialization */

    while(st[j]){
        if(st[j] != '|'){
            maxtmp++;
        }
         else{
            if(maxtmp > maxChars){
                maxChars = maxtmp;
            }
            maxtmp = 0;
         }
        j++;
    }
    j = 0; 

    cout << "!!!!!-----!!!!!-" << st << "-!!!!!!!-----!!!!!" << endl;

    /* Initialization of the dara array */

    char **array = new char*[parts];
    for(int i = 0; i < parts; i++){
        array[i] = new char[maxChars];
    }

    /* Filling the array with data blocks */

    int p = 0;
    for(int i = 0; i < parts; i++){
        while(st[j] != '|'){
            array[i][p] = st[j];
            j++;
            p++;
        }
        if(st[j] == '|'){
            j++;
        }
        p = 0;
    }    
    return array;    
}

在大多数情况下,它按照我需要的方式工作,但问题是它有时会表现得无法预测,破坏了整个程序——数据块并没有在它们应该在的地方结束,还有一堆其他字符被添加到它(通常是以前使用的单词的一部分)。结果看起来像这样(“!!!!!-----!!!!!-”之间的线是预处理数组)

!!!!!-----!!!!!-2003-01-18|-!!!!!!!-----!!!!!
!!!!!-----!!!!!-Whiston's street|-!!!!!!!-----!!!!!
!!!!!-----!!!!!-Miami|-!!!!!!!-----!!!!!

2003-01-18 Whiston's street Miami

!!!!!-----!!!!!-2004-01-18|2005-01-18|-!!!!!!!-----!!!!!
!!!!!-----!!!!!-Whiston's street|Someone's streetz|-!!!!!!!-----!!!!!
!!!!!-----!!!!!-Miami|Siberia|-!!!!!!!-----!!!!!  

2004-01-18 Whiston's street Miami
2005-01-18street Someone's streetz Siberia

!!!!!-----!!!!!-2004-01-18|-!!!!!!!-----!!!!!
!!!!!-----!!!!!-Whiston's street|-!!!!!!!-----!!!!!
!!!!!-----!!!!!-Miami|-!!!!!!!-----!!!!!

2004-01-18 Whiston's street Miami

!!!!!-----!!!!!-2004-01-18|-!!!!!!!-----!!!!!
!!!!!-----!!!!!-Whiston's street|-!!!!!!!-----!!!!!
!!!!!-----!!!!!-Miami|-!!!!!!!-----!!!!!

2004-01-18streetz Whiston's street Miami

对于三组不同的数据,该函数连续调用三次,然后连续打印。

4

1 回答 1

1

如果您不能使用标准字符串类,请编写您自己的简化版本并使用它。

然后做大致相同的事情std::vector——要么使用它,要么编写你自己的简化版本。

当你完成了这两项工作后,编写这个函数来将输入解析为一个my_vector<my_string>应该非常微不足道的边界。

于 2013-04-08T17:16:42.213 回答