![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 27.09.2009
Сообщений: 153
|
![]()
Доброго времени суток.Помогите оптимизировать код.Задача:нужно сравнить две строки по набору составляющих их символов.
например, строки «abcd» и «bcad» считать равными, а «abcd» и «abce» - нет.Есть проблема что вот abcd и bcad программа считает равными а скажем abcd и cdba нет.Подскажите где может быть ошибка в коде. #include <iostream> using namespace std; void main() {char exit; char stroka1[20],stroka2[20]; int faq=0; cout<<"Vvedite stroku nomer 1"<<endl; cin.getline(stroka1,15); cout<<"\n Vvedite vtoruy stroku"<<endl; cin.getline(stroka2,15); if(strlen(stroka1)==strlen(stroka2) ) {for(int i=0;i<strlen(stroka1)-1;i++) {faq=0; for(int j=0; j<strlen(stroka2)-1;j++) {if(stroka1[i]==stroka2[j]) {faq=1; break; }}if(faq==0) {faq=-1; cout<<"Stroki neravni"<<endl; break;}} if(faq==1) cout<<"Stroki ravni";} if (faq==0) cout<<"Stroki neravni"<<endl; cin>>exit; } |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 24.03.2009
Сообщений: 375
|
![]()
В данном случае имеет смысл провести сортировку строк по символам, а затем, просто, сравнить, либо перебором всех символов, либо спецфункцией.
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 08.01.2010
Сообщений: 165
|
![]()
Категорически советуют оформлять код в специальном теге, а то смотреть на эту красную вырвиглазную простыню просто невозможно.
Твой код я бы переделал так: Код:
Последний раз редактировалось kogemrka; 11.09.2010 в 22:58. Причина: К коду добавлены комментарии |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 27.09.2009
Сообщений: 153
|
![]()
Спасибо всё верно но лучше такой вариант
Код HTML:
#include <iostream> #include <cstring> #include <cstdlib> using namespace std; int main() { int d,fl; char str1[20], str2[20]; char sym1[256] = {0}, sym2[256] = {0}; // Ввод данных cout << "Введите первую строку:" << endl; cin.getline(str1, 20); cout << "Введите вторую строку:" << endl; cin.getline(str2, 20); // Заполняем массивы символов. Массивы sym1 и sym2 устроены следующим образом: // в sym[n] хранится, сколько раз символ с кодом n встречался в строке. // разумеется, если наши строки состоят только из строчных латинских букв, // хранить 256 значений не имеет смысла и можно ограничиться 26-ю. int len = strlen(str1); for (int i = 0; i < len; ++i) { ++sym1[str1[i]]; ++sym2[str2[i]]; } // Проверяем, соответствует ли число использований для каждого символа в обоих строках if (strlen(str1) == strlen(str2)) {for (int i = 0; i < 256; ++i) { if (sym1[i] != sym2[i]) { fl=1; } } if (fl==1){cout << "Ne Ravni" << endl;} else {cout << " Ravni" << endl;}} else {cout << "Ne Ravni" << endl;} // Если все проверки (на равенство длины и на число использований каждого символа) // пройдены, пишем, что строки равны и выходим cin>>d; } |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 08.01.2010
Сообщений: 165
|
![]()
Ну, это уже тонкости, не имеющие отношения к своему алгоритму) На вкус и цвет фломастеры разные)
Кстати говоря, в твоей модификации стоит добавить добавить "break;" после проверки на неравенство числа встречающихся символов, то есть: Код:
PS. Почему-то над твоим кодом стоит пометка "код HTML:". И подсветка, разумеется, кривее некуда (ну а какая ещё может быть подсветка, если подсвечивать C++ код как HTML размётку?). Я просто ставлю тег , попробуй, вдруг получится. Последний раз редактировалось kogemrka; 12.09.2010 в 12:18. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Макрос на сравнение и подсчет в первом столбце строк, и сумирование значений этих строк в другом столбце | Shpr0T | Microsoft Office Excel | 8 | 30.08.2010 17:52 |
Сравнение символов | DeEgo | Общие вопросы Delphi | 5 | 12.03.2010 15:14 |
Сравнение строк | Jasper92 | Общие вопросы C/C++ | 6 | 23.12.2009 12:49 |
Сравнение строк | Rivendell | Microsoft Office Excel | 8 | 18.12.2009 10:29 |
С++. Сравнение строк | maxlav | Помощь студентам | 8 | 25.06.2009 04:33 |