Автор Илья Поляков задал вопрос в разделе Другие языки и технологии
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;
}
#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++. Работа со строковыми массивами.
да зачем нужны эти указатели ?? C++. Зачем нужны указатели? почему не обойтись без простой переменной??
Указатель содержит адрес первого байта объекта в памяти, тип указателя, говорит о том сколько
подробнее...
спросили в C POSIX library
Бинарный поиск C#
Двоичный поиск работает на _сортированном массиве_. У Вас генерируется просто набор.
Что
подробнее...
Бинарный поиск C#
Двоичный поиск работает на _сортированном массиве_. У Вас генерируется просто набор.
Что
подробнее...
Задача по языку Си
Фактически, у вас задача на нахождение максимального элемента в последовательбности, только
подробнее...
работа с abc pascal. массивы
Массивы - это совокупности однотипных элементов. Характеризуются они следующим:
каждый
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:
Как в C++ объявить массив с количеством элементов, хранящимся в переменной?
Если число не является константой, то так:
cin >> N; // Это чисто для примера, что N не
подробнее...
спросили в Randomness Stdio h
C++: И снова передача двумерных массив в функцию.. . каким макаром это сделать?
Объясняю: массив - это ряд одинаковых значений (нет, я не Очевидность 🙂 ). Имя массива в C/C++
подробнее...
C++: И снова передача двумерных массив в функцию.. . каким макаром это сделать?
Объясняю: массив - это ряд одинаковых значений (нет, я не Очевидность 🙂 ). Имя массива в C/C++
подробнее...
спросили в Free Pascal User br
Хочу научиться программировать. Подскажите, с чего начать???
В настоящее время в мире создано 8512 компьютерных языков разного уровня и направления.
На
подробнее...
Хочу научиться программировать. Подскажите, с чего начать???
В настоящее время в мире создано 8512 компьютерных языков разного уровня и направления.
На
подробнее...
Метод исключения Гаусса без/c частичным выбором ведущего элемента(Pascal)
Хотелось бы помочь, но мейл, как всегда, съел разметку с параметрами массивов, да и с именами
подробнее...
спросили в SATA Express Studio 4°C
Как научится программировать на C++?
вы решили изучить язык, поэтому выбрали крайне сложную задачу.
звучит примерно так - решил
подробнее...
Как научится программировать на C++?
вы решили изучить язык, поэтому выбрали крайне сложную задачу.
звучит примерно так - решил
подробнее...
С++, объект класса, экземпляр класса, какой тип переменной хранит экземпляр класса? (экземпляр это что? Word, lpstr..?)
Класс это то же самое что старинная структура данных, только теперь он хранит
еще и методы
подробнее...
Программирование С++ Что такое Динамические массивы?
Ну вообще даже в Википедии есть объяснение этой технологии.
Грубо говоря это карман, размер
подробнее...
Можно ли в Excel просуммировать ячейки в столбце через одну?
В зависимости от Вашего опыта работы с Excel. Пусть необходимо суммировать через одну ячейку все
подробнее...
спросили в Другое
что такое прикладное программы
Прикладная программа (приложение, application program) — программа, предназначенная для решения
подробнее...
что такое прикладное программы
Прикладная программа (приложение, application program) — программа, предназначенная для решения
подробнее...