Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2012, 21:20   #11
Noob(c++)
Пользователь
 
Регистрация: 19.06.2012
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Last Посмотреть сообщение
Можно использовать realloc. Но это уже вроде в С-стиле.
мм а поподробней можно?
Noob(c++) вне форума Ответить с цитированием
Старый 19.06.2012, 22:26   #12
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Код:
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>

int main()
{
    std::string str;
    std::cout << ">>";
    std::getline(std::cin, str, '\n');
    std::reverse_copy(str.begin(), str.end(), std::ostream_iterator<char>(std::cout, ""));
    std::cout << std::endl;
    system("pause");
    return 0;
}
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 20.06.2012, 10:28   #13
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию

Код:
#include "stdafx.h"
#include "string.h"
#include "iostream"
#include "conio.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{ 
 int j, i = 0, size = 100;
 char str = (char*)malloc(size * sizeof(char));
 cout << "Enter the word:\n";
 do
 {	
   ch = getch();
   str[i] = ch;
   i++;
   if (size - i < 5)// если количество символов приближается к границе размера блока
   {                 // то удваиваем блок памяти
      size*=2;
      str = realloc(str, size*sizeof(char));
   }
 } while (ch != '\n')
 for(j = i-1; j >= 0 i; j--) //вывод элементов массива
    cout<<str[i];
 return 0;
}
Как-то так это выглядело бы на С(хотя здесь мешанина из C и C++, в С используется printf вместо cout). Если Вам нужен код на ++, то воспользуйтесь вариантами выше.
Пол-жизни сидючи, в монитор глядючи...

Последний раз редактировалось Last; 20.06.2012 в 13:34.
Last вне форума Ответить с цитированием
Старый 20.06.2012, 11:28   #14
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

2Noob(c++). Чтобы понять, что написал pproger, тебе надобно залезть в STL, почитать что такое потоки ввода/вывода, алгоритм copy, обратные итераторы ну и вообще о STL, дело нужное. pproger в своем репертуаре - краткость - сестра таланта - вынос мозга новичку.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 20.06.2012, 13:29   #15
Noob(c++)
Пользователь
 
Регистрация: 19.06.2012
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Last Посмотреть сообщение
Код:
#include "stdafx.h"
#include "string.h"
#include "iostream"
#include "conio.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{ 
 int j, i = 0, size = 100;
 char str = (char*)malloc(size * sizeof(char));
 cout << "Enter the word:\n";
 do
 {	
   ch = getch();
   str[i] = ch;
   i++;
   if (size - i < 5)// если количество символов приближается к границе размера блока
   {                 // то удваиваем блок памяти
      size*=2;
      str = realloc(str, size*sizeof(char));
   }
 } while (ch != '\n')
 for(j = 0; j < i; j++) //вывод элементов массива
    cout<<str[i];
 return 0;
}
Как-то так это выглядело бы на С(хотя здесь мешанина из C и C++, в С используется printf вместо cout). Если Вам нужен код на ++, то воспользуйтесь вариантами выше.
компилятор кучу ошибок выдает =( исправить не могу потому что не понимаю там где память выделяется там с преобразованием типов ругается
Noob(c++) вне форума Ответить с цитированием
Старый 20.06.2012, 13:46   #16
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

void swap(char *p1, char *p2)
{
	char buf = *p1;
	*p1 = *p2;
	*p2 = buf;
}

void reverse(char * str) 
{ 
	char * tail = str + strlen(str) - 1; 
	while ( str < tail ) 
	{ 
		swap(str, tail); 
		++str; 
		--tail; 
	} 
}

int main()
{
	char *str = (char*)malloc(sizeof(char));
	char ch;
	int len = 1;
	while ((ch = getch()) != '\n' && ch != '\r')
	{
		putchar(ch);
		realloc(str, ++len);
		str[len - 2] = ch;
	}
	str[len - 1] = NULL;
	reverse(str);
	putchar('\n');
	puts(str);
	free(str);
	system("pause");
	return 0;
}
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 20.06.2012, 13:55   #17
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Петррр
Цитата:
realloc(str, ++len);
Цитата:
realloc returns a void pointer to the reallocated (and possibly moved) memory block
и вообще, стратегия аллокации у тебя плохая. выделять нужно с запасом. посмотри вариант товарища Last, у него практически то, что нужно
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 20.06.2012, 14:16   #18
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
и вообще, стратегия аллокации у тебя плохая. выделять нужно с запасом. посмотри вариант товарища Last, у него практически то, что нужно
Я поправил вывод строки, теперь должно быть то что нужно. Или ты о другом?
Пол-жизни сидючи, в монитор глядючи...
Last вне форума Ответить с цитированием
Старый 20.06.2012, 14:21   #19
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Last
я же не тебе отвечал, а Петррру)
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 20.06.2012, 14:52   #20
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию

Цитата:
Сообщение от Noob(c++) Посмотреть сообщение
компилятор кучу ошибок выдает =( исправить не могу потому что не понимаю там где память выделяется там с преобразованием типов ругается
У меня нет IDE под рукой, поэтому куча ошибок. Из очевидного - вместо
Код:
char str = ...
должно быть
Код:
char* str = ...
Какие ещё ошибки выдаёт компилятор?
Пол-жизни сидючи, в монитор глядючи...
Last вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с динамическим массивом на С 4eburator Помощь студентам 4 30.09.2010 17:12
Проблема с динамическим массивом zumm Общие вопросы Delphi 3 09.07.2010 20:20
Проблема с динамическим массивом TheKnyazz Общие вопросы C/C++ 3 28.04.2009 18:37
Проблема с динамическим массивом dee_lv Помощь студентам 7 09.06.2008 16:58
проблема с динамическим массивом romeo007.06 Общие вопросы Delphi 1 03.04.2008 20:18