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
3131
Уфа
Вы переворачиваете строку из 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, Супермодераторы



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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