Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
markzigler
#1

Программа для создания анаграм - C++

17.04.2012, 23:26. Просмотров 1296. Ответов 10
Метки нет (Все метки)

Помогите, пожалуйста! Знаю, мозговитых людей здесь много... Думаю, кто-нибудь заинтересуется

Суть программы в том, чтобы создать проект, который позволяет зашифровывать и расшифровывать сообщения с помощью "шифра перестановки". Этот шифр меняет местами две соседние буквы.

заранее благодарю.
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2012, 23:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа для создания анаграм (C++):

Программа для создания матриц - C++
Задание прикреплено в файле. Вот что я смог написать, прошу, чем проще, тем лучше. лучше с объяснениями. Заранее спасибо) #include...

Программа для создания словаря - C++
Словарь представляет из себя любые слова и их ID.Я сделал класс Dictionary и методы этого класса для работы со словарём,однако возникла...

Программа для создания и управления порталом (наподобие siteedit) - C++
Здравствуйте! Нужно сделать прогу для создания и управления порталом за основу можно взять прогу siteedit (http://siteedit.ru/) ...

Программа для создания дипломов (диплом мастер, который позволяет печатать дипломы ВПО и СПО) - C++
преподаватель задал написать программу с графическим интрефейсом..программа должна представлять собой программу для создания дипломов, т.е...

демонстрационная программа создания и уничтожения процессов - C++
Помогите пожалуйста как можно исправить программу Приложение 2 //демонстрационная программа создания и уничтожения процессов //тип...

Какие нужны библиотеки для создания читов для онлайн игр? - C++
Здравствуйте, недавно возник вопрос, А как собственно говоря делают читы для онлайн игр? Какие для них нужны библиотеки, какие методы...

10
Venteux
7 / 7 / 1
Регистрация: 19.09.2010
Сообщений: 21
18.04.2012, 16:23 #2
А в чём, собственно, проблема?
0
cactus09
Чайник
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
18.04.2012, 17:24 #3
Ну вот собственно программа для зашифровки
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
  char mass[10], tmp; //ñòðîêГ* ГЁГ§ 10 ñèìâîëîâ ГЁ ïåðåìåГ*Г*Г*Гї äëÿ âðåìåГ*Г*îãî õðГ*Г*ГҐГ*ГЁГї ñèâîëГ*
  cout<<"Vvedite stroky: "; 
  for(int i=0;i<10;i++){
  cin>>mass[i];}
  
  for(int i=0;i<9;i+=2){ // öèêûë Г§Г*ГЄГ®Г*Г·ГЁГІГ±Гї êîãäГ* i=8, ГІГЄ mass[10]='\0' (ñèìâîë îêîГ*Г·Г*Г*ГЁГї Г¬Г*Г±Г±ГЁГўГ*)
  tmp=mass[i];
  mass[i]=mass[i+1];
  mass[i+1]=tmp;}
  
  cout<<"Zashifrovannaia stroca: ";
  for(int i=0;i<10;i++){
  cout<<mass[i];}
  
  cout<<endl;
  system("PAUSE");  
  return 0;
}
При введеном "hello_word" выдает "ehll_oowdr"
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
18.04.2012, 18:12 #4
Цитата Сообщение от cactus09 Посмотреть сообщение
using namespace std;
Зря вы так пишите, зря-зря-зря.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <algorithm>
 
int main()
{
    std::string str;
    std::cin >> str;
    for (int i = 1; i < (int) str.length(); i += 2)
        std::swap( str[i - 1], str[i] );
        
    std::cout << str;
}
0
cactus09
Чайник
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
18.04.2012, 18:21 #5
diagon, Не вижу в этом не чего плохого . Я же не использую в программе еще каки-либо назавания которые совподали с пространством имен std, а так каждый раз писать srd:: упаришся
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
18.04.2012, 18:29 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от cactus09 Посмотреть сообщение
каждый раз писать srd:: упаришся
Заметно.)

Цитата Сообщение от cactus09 Посмотреть сообщение
diagon, Не вижу в этом не чего плохого
А оно есть.
Вот простой(хотя не очень) пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <vector>
#include <iterator>
 
int main()
{
    std::vector< int > my_array
    (
        std::istream_iterator< int > (std::cin),
        std::istream_iterator< int > () 
    );
    
    std::cout << my_array.size() << std::endl;
}
Обычная программа, правильно работает.
Но стоит только убрать все std:: и поставить вместо них using namespace std; и она уже не компилируется.
P.S. а чтобы не упариваться, можно изучить метод слепой печати, очень полезная штука в программировании.
1
soon
18.04.2012, 19:24
  #7

Не по теме:

Цитата Сообщение от diagon Посмотреть сообщение
Но стоит только убрать все std:: и поставить вместо них using namespace std; и она уже не компилируется.
С небольшими ухищрениями
компилируется
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
soon@desktop:~/Src/C++/main$ cat main.cpp && make
#include <iostream>
#include <vector>
#include <iterator>
 
using namespace std;
 
int main()
{
    std::vector< int > my_array
    (
        istream_iterator< int > (::cin),
        istream_iterator< int > () 
    );
    
    cout << my_array.size() << endl;
}
g++ -c -Wall -D_GLIBCXX_USE_NANOSLEEP -O3 --std=gnu++11 main.cpp -o main.o
g++ main.o -lm  -lboost_regex -lboost_filesystem -lboost_system -lboost_timer -lboost_date_time -lboost_thread -o main
soon@desktop:~/Src/C++/main$ cat main.cpp && make
#include <iostream>
#include <vector>
#include <iterator>
 
using namespace std;
 
int main()
{
    std::vector< int > my_array
    (
        move(istream_iterator< int > (cin)),
        istream_iterator< int > () 
    );
    
    cout << my_array.size() << endl;
}
g++ -c -Wall -D_GLIBCXX_USE_NANOSLEEP -O3 --std=gnu++11 main.cpp -o main.o
g++ main.o -lm  -lboost_regex -lboost_filesystem -lboost_system -lboost_timer -lboost_date_time -lboost_thread -o main
soon@desktop:~/Src/C++/main$

1
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
18.04.2012, 19:41 #8
Цитата Сообщение от soon Посмотреть сообщение

Не по теме:

С небольшими ухищрениями

компилируется
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
soon@desktop:~/Src/C++/main$ cat main.cpp && make
#include <iostream>
#include <vector>
#include <iterator>
 
using namespace std;
 
int main()
{
    std::vector< int > my_array
    (
        istream_iterator< int > (::cin),
        istream_iterator< int > () 
    );
    
    cout << my_array.size() << endl;
}
g++ -c -Wall -D_GLIBCXX_USE_NANOSLEEP -O3 --std=gnu++11 main.cpp -o main.o
g++ main.o -lm  -lboost_regex -lboost_filesystem -lboost_system -lboost_timer -lboost_date_time -lboost_thread -o main
soon@desktop:~/Src/C++/main$ cat main.cpp && make
#include <iostream>
#include <vector>
#include <iterator>
 
using namespace std;
 
int main()
{
    std::vector< int > my_array
    (
        move(istream_iterator< int > (cin)),
        istream_iterator< int > () 
    );
    
    cout << my_array.size() << endl;
}
g++ -c -Wall -D_GLIBCXX_USE_NANOSLEEP -O3 --std=gnu++11 main.cpp -o main.o
g++ main.o -lm  -lboost_regex -lboost_filesystem -lboost_system -lboost_timer -lboost_date_time -lboost_thread -o main
soon@desktop:~/Src/C++/main$

Не по теме:


Во втором листинге можно move убрать(скобки оставить), но не в этом суть.
Я много раз использовал такой конструктор, но при этом даже не подозревал, как близко лежат грабли. И все это благодаря банальному стилю >_<''

1
TheAthlete
153 / 153 / 13
Регистрация: 31.08.2010
Сообщений: 535
08.05.2012, 17:36 #9
Цитата Сообщение от diagon Посмотреть сообщение
#include <iostream>
#include <vector>
#include <iterator>
int main()
{
std::vector< int > my_array
(
std::istream_iterator< int > (std::cin),
std::istream_iterator< int > ()
);
std::cout << my_array.size() << std::endl;
}
Обычная программа, правильно работает.
Но стоит только убрать все std:: и поставить вместо них using namespace std; и она уже не компилируется.
P.S. а чтобы не упариваться, можно изучить метод слепой печати, очень полезная штука в программировании.
На самом деле данную программу можно переписать по-другому, чтобы была понятна ошибка и особенность данной ошибки, точнее 2 ошибки (опишу далее):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <vector>
#include <iterator>
 
using std::vector;
using std::cout;
using std::endl; 
 
using std::istream_iterator;
 
int main()
{
  vector<int> vec(istream_iterator<int>(std::cin), istream_iterator<int>());
  cout << vec.size() << endl;
 
  return 0;
}
Данный код нормально компилируется, но если мы опустим std у cin, то смысл данной строки кардинально изменится:

в данном случае будет определяться функция vec, возвращающая тип vector<int>. Функция vec получает два параметра:
  • Первый параметр, cin, относится к типу istream_iterator<int>. Лишние круглые скобки вокруг cin игнорируются. Т.е. cin это пользовательская переменная, которая приводится к типу istream_iterator<int>, а не библиотечный std::cin
  • Второй параметр не имеет имени. Он относится к типу указателя на функцию, которая вызывается без параметров и возвращает istream_iterator<int>

Если мы используем std::cin, то компилятор знает, что это не пользовательская переменная и все идет как надо, т..е мы здесь инициализируем вектор.

Лучшим решением данной проблемы будет либо использование круглых скобок в первом параметре, при этом отпадает необходимость следить за std в cin и в других стандартных операторах:

C++
1
vector<int> vec((istream_iterator<int>(std::cin)), istream_iterator<int>());
и если здесь мы опустим std, то компилятор нам выдаст ошибку, что оператор cin не определен в данной области видимости, что потребует отдельного включения определения using, например так:

C++
1
2
using std::cin;
vector<int> vec((istream_iterator<int>(cin)), istream_iterator<int>());
Вторым решением (более предпочтительным) является использование именованных итераторов вместо анонимных:
C++
1
2
3
4
using std::cin;
istream_iterator<int> dataBegin(cin);
istream_iterator<int> dataEnd;
vector<int> vec((dataBegin, dataEnd);
Более подробно о данной проблеме можете ознакомиться в книгах
  1. "Мейерс С. Эффективное использование STL. Библиотека программиста" Совет 6. Остерегайтесь странностей лексического разбора C++
  2. "Герб Саттер Решение сложных задач на С++". Задача 10.1. Инициализация. Часть 1
1
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.05.2012, 18:12 #10
TheAthlete, однако долго же вы думали >_<''
Этот баг(хорошо, фича) взят из книги Саттера "Новые сложные задачи на с++".
У него это неплохо описано, в частности, там объясняется, что эта проблема появилась из-за совместимости с С.
И, кстати, вы не учли третье решение - явно указывать пространство имен. Оно же наилучшее.
0
TheAthlete
153 / 153 / 13
Регистрация: 31.08.2010
Сообщений: 535
08.05.2012, 18:21 #11
Цитата Сообщение от diagon Посмотреть сообщение
TheAthlete, однако долго же вы думали >_<''
я этот топик только увидел

В контексте данной задачи лучше объявлять именованные переменные итераторов. Как раз в вышеупомянутой книге вместо std::cin передается объект dataFile и использовать пространства имен будет неуместно.
0
08.05.2012, 18:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2012, 18:21
Привет! Вот еще темы с ответами:

Литература для создания элементарного языка управляющих сигналов и интерпретатора для него - C++
Доброго времени суток! Подскажите, с чего начать при создании? Нужно придумать элементарный язык для задания управляющих сигналов и...

Интерфейс для создания приложения - C++
Подскажите программу чтобы было легко создать интерфейс для проги. Конструктор готовых кнопок, модулей и тд. И как в ней создать интерфейс.

Конструктор для создания прямой - C++
Тут у меня есть класс точка(Point) и контейнерный класс прямая(Straight), которая задаётся 2-мя точками на плоскости.Допустим точки...

Набор для создания 3d игр - C++
Набор для создания 3d игр. Что нужно? photoshop cs4 есть. акки в facebook на 5000 друзей есть . можно будет группу на столько...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru