#include <cstddef> // size_t
#include <cstring> // strrchr
#include <iostream>
#include <cctype>
using namespace std;
// Особое значение координаты -- "не позиция".
size_t const NPOS = -1;
// Позиция в тексте: номер строки и колонки (позиция в строке).
struct Text_position
{
size_t line = NPOS; // по умолчанию -- не позиция.
};
// Проверка на равенство позиций в тексте (используется в тесте):
inline bool operator==(Text_position const & a, Text_position const & b)
{
return a.line == b.line;
}
// ...и на неравенство:
inline bool operator!=(Text_position const & a, Text_position const & b)
{
return !(a == b);
}
// Определить количество строк в тексте.
size_t text_size(char const * const * text)
{
size_t size = 0;
while (*text++)
++size;
return size;
}
// Решение задачи: поиск наибольшего числа в тексте.
Text_position find_the_largest_number(char const * const * text)
{
size_t number = -1;
// Идём с начала текста.
char max = 0;
for (size_t line = 0; line < text_size(text); line++)
for (size_t column = 0; column < strlen(text[line])-1 ; column++)
if (isdigit(*text[column]))
if (*text[column] > max)
{
max = *text[column];
number = line;
}
if (number != -1)
return {(number)};
return {}; // будет { NPOS } -- символ не найден.
}
int test_find_the_largest_number()
{
char const * const text[]
{
"A l5ne",
"An1ot978her line",
"!@#$^!%",
" ",
"Abcd 19921344",
nullptr
};
if (find_the_largest_number(text) != Text_position{ 3 })
return 1;
if (find_the_largest_number(text) == Text_position{ 2 })
return 2;
if (find_the_largest_number(text) != Text_position{ 1 })
return 3;
if (find_the_largest_number(text) == Text_position{ 4 })
return 4;
return 0;
}
int main()
{
cout << "test find_the_largest_number (should write 0): ";
cout << test_find_the_largest_number();
return 0;
}
В коде много "странностей", но основная ошибка в том, что в функции поиска вы почему-то обращаетесь к text[column]
. Это, разумеется, совершенно не правильно. text
- это массив размера text_size(text)
(5
в вашем примере) и обращаться к нему нужно по индексу line
. У вас же происходит вылет за пределы массива.
Обращение к символам текста, согласно вашей задумке, должно выглядеть как text[line][column]
. А у вас, по какой-то непонятной причине, используется *text[column]
. Почему вдруг *text[column]
?
Также не понятно, почему цикл column
итерирует до strlen(text[line])-1
, а не до strlen(text[line])
. Почему вдруг -1
?
Также, в заголовке вопроса сказано, что необходимо найти запись максимального числа. Ваш код даже не пытается этого делать. Ваш код ищет максимальную цифру.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть самописное подобие stlСуть задачи - вектор пар (тоже самописные)
Пишу код под задачу со считалкой в строке и одномерным массивом с людьмиЧерез поток делю строку на слова и через while выполняю считалку один...
Можно ли считать указатели на функции одним из способов реализации статического полиморфизма?
Пытаюсь решить следующую задачу: создать пользовательскую очередь, в которой каждый элемент равен сумме предыдущих, первый элемент равен...