Min в строке и max в столбце(матрицы)
Started By desert_rose, дек 21 2006 18:59
39 ответов в этой теме
#32
Отправлено 28 декабря 2006 - 19:55
спасибо))
меня только что обрадовали, у нас договоренность с очень шарющим в программировании одногруппником была-- я ему решаю модуль по истории на 5, он мне оставшиеся задачки по программировании. по истории у него 5, задачки он уже передал, правда надо посмотреть, может че и не получитсся, если что я напишу!
меня только что обрадовали, у нас договоренность с очень шарющим в программировании одногруппником была-- я ему решаю модуль по истории на 5, он мне оставшиеся задачки по программировании. по истории у него 5, задачки он уже передал, правда надо посмотреть, может че и не получитсся, если что я напишу!
Why to walk when you can run? // Iacoca Lee
#33
Отправлено 29 декабря 2006 - 20:25
а вот и первые вопросы..
вот решение задачки, но что-то я не очень могу понять что к чему.не подскажите?а?
Найдите самое длинное общее слово двух заданных предложений .
#include <iostream.h>
#include <string.h>
#include <conio.h>
void fillbuf(char *buf, char *strt_ptr, char *end_ptr);
void putbuf(char *strt_ptr, char *end_ptr);
const int
STRSIZE = 80,
STRNUM = 2;
int main()
{
char
string[STRNUM][STRSIZE],
*ptr,
*strt_ptr,
*end_ptr,
*strt_big,
*end_big,
*sep = " -.,;:!?",
*buf = new char [STRSIZE];
int
len = 0;
cin.getline(string[0], STRSIZE);
cin.getline(string[1], STRSIZE);
strt_ptr = strtok(string[0], sep);
while (strt_ptr)
{
end_ptr = strtok(NULL, sep);
fillbuf(buf, strt_ptr, end_ptr);
if (strstr(string[1], buf))
if (end_ptr - strt_ptr >= len)
{
strt_big = strt_ptr;
end_big = end_ptr;
len = (end_ptr - strt_ptr);
}
strt_ptr = end_ptr;
}
putbuf(strt_big, end_big);
cout << "Press ENTER to continue...";
getch();
return 0;
}
void fillbuf(char *buf, char *strt_ptr, char *end_ptr)
{
while (strt_ptr < end_ptr)
*(buf++) = *(strt_ptr++);
return;
}
void putbuf(char *strt_ptr, char *end_ptr)
{
while (strt_ptr < end_ptr)
putchar(*(strt_ptr++));
return;
}
вот решение задачки, но что-то я не очень могу понять что к чему.не подскажите?а?
Найдите самое длинное общее слово двух заданных предложений .
#include <iostream.h>
#include <string.h>
#include <conio.h>
void fillbuf(char *buf, char *strt_ptr, char *end_ptr);
void putbuf(char *strt_ptr, char *end_ptr);
const int
STRSIZE = 80,
STRNUM = 2;
int main()
{
char
string[STRNUM][STRSIZE],
*ptr,
*strt_ptr,
*end_ptr,
*strt_big,
*end_big,
*sep = " -.,;:!?",
*buf = new char [STRSIZE];
int
len = 0;
cin.getline(string[0], STRSIZE);
cin.getline(string[1], STRSIZE);
strt_ptr = strtok(string[0], sep);
while (strt_ptr)
{
end_ptr = strtok(NULL, sep);
fillbuf(buf, strt_ptr, end_ptr);
if (strstr(string[1], buf))
if (end_ptr - strt_ptr >= len)
{
strt_big = strt_ptr;
end_big = end_ptr;
len = (end_ptr - strt_ptr);
}
strt_ptr = end_ptr;
}
putbuf(strt_big, end_big);
cout << "Press ENTER to continue...";
getch();
return 0;
}
void fillbuf(char *buf, char *strt_ptr, char *end_ptr)
{
while (strt_ptr < end_ptr)
*(buf++) = *(strt_ptr++);
return;
}
void putbuf(char *strt_ptr, char *end_ptr)
{
while (strt_ptr < end_ptr)
putchar(*(strt_ptr++));
return;
}
Сообщение изменено: desert_rose (29 декабря 2006 - 20:25 )
Why to walk when you can run? // Iacoca Lee
#34
Отправлено 30 декабря 2006 - 15:10
совершенно кривой код, так писать не надо, лучше уж вобще не писать =)
вот тесты, которые у меня не прошли:
основные ошибки:
некорректное использование strtok() (не проиходит копирования, если только одно слово, т.к, end_ptr == NULL)
совершенно ненужная арифметика указателей, легко допустить ошибку, и вобще некрасиво как то =)
автор забыл сделать detele[] buf;
намного легче использовать std::string и другие функции STL библиотеки
вот тесты, которые у меня не прошли:
1) aa aa ответ: (пусто) 2) aa aaaa aa aaaa ответ: aa 3) abc !defg! .defg! ответ: (пусто)
основные ошибки:
некорректное использование strtok() (не проиходит копирования, если только одно слово, т.к, end_ptr == NULL)
совершенно ненужная арифметика указателей, легко допустить ошибку, и вобще некрасиво как то =)
автор забыл сделать detele[] buf;
намного легче использовать std::string и другие функции STL библиотеки
#include <iostream> #include <sstream> #include <string> #include <algorithm> using namespace std; char modd(char x) { string delim = ",.!-_?:;"; if (delim.find(x) != string::npos) return ' '; return x; } int main() { string a, b; getline(cin, a); getline(cin, b); transform(a.begin(), a.end(), a.begin(), modd); string t; string mx = ""; istringstream ss(a); while (ss >> t) { if (b.find(t) != string::npos) if (mx.size() < t.size()) mx = t; } if (!mx.size()) cout << "no match" << endl; else cout << mx << endl; //while(cin.get() == '\n'); return 0; }
int main(void)
#38
Отправлено 02 января 2007 - 16:33
все проходит отлично!спасибо за помощь))
но вот неочень понимаю вот эти строчки. . . . . . .
transform(a.begin(), a.end(), a.begin(), modd);
string t;
string mx = "";
istringstream ss(a);
while (ss >> t)
{
if (b.find(t) != string::npos)
if (mx.size() < t.size())
mx = t;
но вот неочень понимаю вот эти строчки. . . . . . .
transform(a.begin(), a.end(), a.begin(), modd);
string t;
string mx = "";
istringstream ss(a);
while (ss >> t)
{
if (b.find(t) != string::npos)
if (mx.size() < t.size())
mx = t;
Why to walk when you can run? // Iacoca Lee
#39
Отправлено 02 января 2007 - 17:04
transform(a.begin(), a.end(), a.begin(), modd); string t; string mx = ""; istringstream ss(a); while (ss >> t) { if (b.find(t) != string::npos) if (mx.size() < t.size()) mx = t; }
постараюсь доступно обьяснить
transform()- функция стандартной библиотеки C++. в данном случае transform() использует функцию modd() для того, чтобы заменить все знаки препинания на пробелы. Зачем? Для того что в цикле while (ss >> t) переменная t была следующим словом. слова разделены одним или более пробелами. цикл заканчивается тогда, когда нет больше слов. оператор >> можно использовать для чтения из любогo потока, в данном случае это строка (istringstream). в цикле идет поиск полученного слова во второй строке. если такого там нет, find() возвращает string::npos. дальше идет проверка на длину найденного слова, если новое слово длиннее, mx изменяется.
int main(void)