c работа с массивами



Автор Илья Поляков задал вопрос в разделе Другие языки и технологии

C++. Работа со строковыми массивами. и получил лучший ответ

Ответ от Антон Афанасьев[активный]
Половина кода все равно съелась. Юзай pastebin.com
Единственное что могу предположить - нужно внимательно следить за тем, чтобы k правильно увеличивалось когда мы стоим на пробеле.
И не забывать завершать строки в полученном массиве нулем.
Можешь пройтись дебагером и посмотреть что происходит, если совсем не понятно что к чему.

Ответ от Николай Веселуха[гуру]
#include <iostream>
using namespace std;
struct rowcol { size_t row; size_t col; };
typedef struct rowcol ROWCOL;
bool rowscols(ROWCOL &, const char *);
void showmatrix(char **, size_t);
int main() {
    const size_t size = 64;
    size_t it = 0;
    char text[size];
    cout << "Text?.. ";
    fgets(text, size, stdin);
    ROWCOL rc;
    if (rowscols(rc, text)) {
        char ** words = new char * [rc.row];
        for (size_t r = 0; r < rc.row; r++) {    
            words[r] = new char [rc.col];        
            for (size_t c = 0; c < rc.col; c++) {
                if (isspace(text[it++])) {
                    words[r][c] = 0;
                    while (isspace(text[it++]));
                    --it; break;
                } else words[r][c] = text[it - 1];
            }
        }
        showmatrix(words, rc.row);
        for (size_t r = 0; r < rc.row; r++) delete[] words[r];
        delete[] words;
    } else cout << "a Error!
";
    cin.get(); cin.get();
    return 0;
}
void showmatrix(char ** _matrix, size_t _rows) {
    size_t r, c;
    for (r = 0; r < _rows; r++, cout << endl) for (c = 0; int(_matrix[r][c]); c++) cout << _matrix[r][c];
}
bool rowscols(ROWCOL & _rc, const char * _arr) {
    size_t n = 0, row = 0, col = 0, count = 0;
    bool words = true;
    char space = 32;
    while (_arr[n] != 0) {    
        if (_arr[n] != space) ++count;
        else if (count > col) col = count;
        if (words && _arr[n] != space) {
            ++row;
            words = false;
        } else if (_arr[n] == space) {
            count = 0;
            words = true;
        }
        ++n;
    }
    if (count > col) col = count;
    _rc.row = row;
    _rc.col = col;
    if (row && col) {
        ++_rc.col; return true;
    }
    return false;
}

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: C++. Работа со строковыми массивами.
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*