2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 C++ база
Сообщение04.02.2016, 22:29 
Аватара пользователя


26/03/13
326
Russia
Написал следующую программу для того, чтобы перевернуть строку

Код:
#include<iostream>
#include<string>
using namespace std;

const int Max=80;

//inline void reverseit(char[]);

int main()
{
char str[Max],temp;
cin.get(str,Max,'.');       

for (int i=0;i<(Max-1)/2;i++)
  {
    temp=str[i];
    str[i]=str[(Max-2-i)];
      str[(Max-2-i)]=temp;   
   }

cout<< str <<endl;      
system("pause");      
return 0;      
}


Код:
cout<< str <<endl;
всё равно ничего не выводит. Почему такое может быть? Компилятор - Developer C++ 4.9

 Профиль  
                  
 
 Re: C++ база
Сообщение04.02.2016, 22:55 
Заслуженный участник
Аватара пользователя


01/08/06
3054
Уфа
Вы переворачиваете строку из 80 символов (в результате впереди идут нулики, которые были сзали, а нулик — это конец строки), а нужно из стольки, сколько ввёл пользователь:
Используется синтаксис C++
for(int i=0;i<(strlen(str)-1)/2;i++)

 Профиль  
                  
 
 Re: C++ база
Сообщение04.02.2016, 23:01 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Потому что Вы вводите меньше 80 символов, у Вас в конце строки нули, они переходят в начало и печатается пустая строка.

Зачем Вы используете сишные строки, когда в С++ есть std::string?

 Профиль  
                  
 
 Re: C++ база
Сообщение05.02.2016, 01:52 
Аватара пользователя


11/09/13
30
Местное я...
Код:
#include <algorithm>
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str = "";

    getline(cin, str);

    reverse(str.begin(), str.end()); // из заголовка algorithm

    cout << str << endl;

    return 0;
}

 Профиль  
                  
 
 Re: C++ база
Сообщение05.02.2016, 10:19 
Заслуженный участник
Аватара пользователя


19/12/10
1546
Как по мне, то вместо
Используется синтаксис C++
string str = "";

ленивее было бы написать
Используется синтаксис C++
string str;

:-)

 Профиль  
                  
 
 Re: C++ база
Сообщение05.02.2016, 13:16 
Аватара пользователя


26/03/13
326
Russia
То есть после окончания строки все остальные члены массива заполняются
Код:
'\0'
?

 Профиль  
                  
 
 Re: C++ база
Сообщение05.02.2016, 13:34 
Заслуженный участник
Аватара пользователя


19/12/10
1546
Имхо, инициализация string пустой С-шной строкой и так бессмысленна. А в данном случае, вообще, никакая инициализация не нужна, так как функция getline(cin, str) удаляет прежнее содержание строки str перед началом записи в неё.

-- 05 фев 2016, 13:37 --

Попробуйте, например, заменить string str; на string str("abcdefgh");

 Профиль  
                  
 
 Re: C++ база
Сообщение05.02.2016, 14:32 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Joe Black в сообщении #1096949 писал(а):
То есть после окончания строки все остальные члены массива заполняются
Код:
'\0'
?

Нет, они изначально были ими заполнены. Потому что вы-то ничего туда не записали. Значит, записывается автоматически. Причём будьте осторожны: иногда происходит заполнение нулём, а иногда - остаётся мусор от предыдущих использований памяти. Это зависит от размещения переменной, но новичку лучше вообще ни на что не полагаться, а привыкнуть инициализировать всё всегда.

В обсуждаемом варианте с типом string строка
включает в себя инициализацию (пустой строкой), поскольку в нём предусмотрен для этого соответствующий метод - конструктор по умолчанию - и он "чистит мусор", чтобы в объекте не оказалось ерунды, приводящей к непонятным ошибкам.

 Профиль  
                  
 
 Re: C++ база
Сообщение05.02.2016, 16:15 
Модератор


19/10/15
1196
 !  Protopopulus, предупреждение за выкладывание решения простой учебной задачи.

 Профиль  
                  
 
 Re: C++ база
Сообщение05.02.2016, 20:04 
Аватара пользователя


11/09/13
30
Местное я...
whitefox в сообщении #1096924 писал(а):
Как по мне, то вместо
Используется синтаксис C++
string str = "";

ленивее было бы написать
Используется синтаксис C++
string str;


Любая переменная должна быть инициализирована! Хотя бы визуально...

 Профиль  
                  
 
 Re: C++ база
Сообщение05.02.2016, 20:09 
Заслуженный участник
Аватара пользователя


19/12/10
1546
Она и инициализируется. Конструктором по умолчанию. А насчёт визуальности . . . мне ленивость милее. :-)

 Профиль  
                  
 
 Re: C++ база
Сообщение05.02.2016, 20:14 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Protopopulus в сообщении #1097128 писал(а):
Любая переменная должна быть инициализирована! Хотя бы визуально...

Тогда

 Профиль  
                  
 
 Re: C++ база
Сообщение05.02.2016, 20:22 
Заслуженный участник
Аватара пользователя


19/12/10
1546
Munin
Боюсь, ваш вариант компилятор примет за прототип функции.

 Профиль  
                  
 
 Re: C++ база
Сообщение05.02.2016, 22:03 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Не должен.

 Профиль  
                  
 
 Re: C++ база
Сообщение05.02.2016, 22:13 
Заслуженный участник
Аватара пользователя


19/12/10
1546
А вот мой Visual C++ как раз это делает.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Mikhail_K


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group