Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.83
Matrasa
0 / 0 / 0
Регистрация: 02.12.2010
Сообщений: 40
#1

copy в Delphi, аналог на C++? - C++

02.12.2010, 07:21. Просмотров 5153. Ответов 16
Метки нет (Все метки)

Здравствуйте! Пишу курсовую на C++, некоторые функци для программы нашел в коде Delphi. Но вот не могу перенести две строки.

Delphi
1
2
while Rims[I] = Copy(S, 1, Length(Rims[I]) ) do
        S := Copy( S, 1+Length(Rims[I]), 255);
Функции strncpy и strcpy ругаются про неправильный тип (я использую string а не char), как мне заставить их работать с типом стринг?

Пожалуйста, помогите.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2010, 07:21     copy в Delphi, аналог на C++?
Посмотрите здесь:

Аналог функции, которая используется в Delphi strtoint/inttostr C++
алгоритм copy C++
this и Copy-Constructor C++
C++ Аналог функции copy из делфи для string в С++
std::copy C++
C++ Deep copy and Shadow copy
C++ Вывод с copy
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiakonX
63 / 11 / 1
Регистрация: 15.11.2010
Сообщений: 29
02.12.2010, 08:24     copy в Delphi, аналог на C++? #2
а суть этих строк, а то чет не совсем понятна задумка? Может можно проще сделать. Опишите что нужно.

А вообще для переведа string в char в классе string есть специальный метод c_str.
Matrasa
0 / 0 / 0
Регистрация: 02.12.2010
Сообщений: 40
02.12.2010, 08:38  [ТС]     copy в Delphi, аналог на C++? #3
DiakonX, вот код Дельфи полностью. Процедура переводит римские цифры в арабские (Принимает строку и возвращает число):

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
type str2 = string[2]; 
const 
   Rims : array[1..14] of str2 = ('M','CM','D','CD','C','XC','L','XL','X','IX','V','IV','I',' '); 
   Arab : array[1..14] of integer = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1, 0);
 
var
  Form1: TForm1;
  N, NI, I, J : integer;
  S    : string;
 
function Rim2Arab (S:string) : integer; 
  var I, N : integer;
  begin 
    I:=1; N := 0; 
    while S<>'' do begin
      while Rims[I] = Copy(S, 1, Length(Rims[I]) ) do begin
        S := Copy( S, 1+Length(Rims[I]), 255);
        N := N + Arab[I]
      end;
      I:=I+1 
    end; 
    Rim2Arab := N 
  end;
А вообще для переведа string в char в классе string есть специальный метод c_str.
Ок, спасибо, погуглим.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
02.12.2010, 10:35     copy в Delphi, аналог на C++? #4
код на паскале из википедии взяли, а для с++ оттуда уже сами не смогли?
http://ru.wikipedia.org/wiki/%D0%A0%...84.D1.80.D1.8B
Kastaneda
Форумчанин
Эксперт С++
4263 / 2795 / 219
Регистрация: 12.12.2009
Сообщений: 7,122
Записей в блоге: 1
Завершенные тесты: 1
02.12.2010, 11:19     copy в Delphi, аналог на C++? #5
В классе string перегружен оператор =. Вместо strcpy можно писать так:
C++
1
2
3
string S="Hello";
string s;
s=S;
если, по каким-то причинам вам необходимо использовать сишные ф-ции, то можно использовать c_str(), она возвращает укзатель на сишную строку, например:
C++
1
2
3
string S="Hello";
string s;
strcpy(s.c_str(),S.c_str());
Matrasa
0 / 0 / 0
Регистрация: 02.12.2010
Сообщений: 40
02.12.2010, 11:29  [ТС]     copy в Delphi, аналог на C++? #6
Kastaneda,

strcpy(s.c_str(),S.c_str());
Я так делал, ошибка...

error C2664: 'strcpy' : cannot convert parameter 1 from 'const char *' to 'char *'
Kastaneda
Форумчанин
Эксперт С++
4263 / 2795 / 219
Регистрация: 12.12.2009
Сообщений: 7,122
Записей в блоге: 1
Завершенные тесты: 1
02.12.2010, 11:34     copy в Delphi, аналог на C++? #7
Цитата Сообщение от Matrasa Посмотреть сообщение
Привык к string в Delphi, и не пойму почему в Си им не пользуются
Потому, что Си более низкий язык, чем Delphi.
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
02.12.2010, 16:04     copy в Delphi, аналог на C++? #8
Kastaneda, поправочка - более низкоуровневый. А то "низкий" звучит так, как будто он, извиняюсь, Г.
Matrasa
0 / 0 / 0
Регистрация: 02.12.2010
Сообщений: 40
03.12.2010, 07:22  [ТС]     copy в Delphi, аналог на C++? #9
Ну все таки как? А?

Вот нашел в инете статью про функции для класса string

C++
1
2
3
4
string str1 = "Hello ";
string str2 = "world!";
 
str1.append(str2);
Эта функция работает.

C++
1
str2.copy(str1, 4, 1);
А эта не работает! Почему? Ошибку пишет такую:

error C2664: 'copy' : cannot convert parameter 1 from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' to 'char *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
03.12.2010, 08:08     copy в Delphi, аналог на C++? #10
Matrasa, А посмотреть что это за функция слабо было?
string::copy
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
03.12.2010, 11:55     copy в Delphi, аналог на C++? #11
Цитата Сообщение от Matrasa Посмотреть сообщение
Kastaneda,



Я так делал, ошибка...

error C2664: 'strcpy' : cannot convert parameter 1 from 'const char *' to 'char *'
она говорит, что ты передаёшь константную строку там, где передаётся строка, в которую собираешься писать
Matrasa
0 / 0 / 0
Регистрация: 02.12.2010
Сообщений: 40
03.12.2010, 11:56  [ТС]     copy в Delphi, аналог на C++? #12
ForEveR, Дак в той статье было написано что функции работают с типом string, переменные которого можно обьявлять после обнавления #include <string>.

Ну неужели ничего нельзя сделать? Может быть как-то можно использовать char? Не могу понять как создать массив char который бы принимал строки произвольной длинны, мог прибавлять к себе другую строку или вычитать. Как это сделать???
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
03.12.2010, 11:57     copy в Delphi, аналог на C++? #13
С массивами так не получится, только если не описать на их основе класс, перегрузить соответствующие операторы и т.д. Но это всё уже сделано в стандартном классе string, поэтому учитесь работать с ним.
Kastaneda
Форумчанин
Эксперт С++
4263 / 2795 / 219
Регистрация: 12.12.2009
Сообщений: 7,122
Записей в блоге: 1
Завершенные тесты: 1
03.12.2010, 12:03     copy в Delphi, аналог на C++? #14
Цитата Сообщение от Matrasa Посмотреть сообщение
Не могу понять как создать массив char который бы принимал строки произвольной длинны
Как вы себе это представляете?
C
1
char array[столько, сколько будет нужно]
Компилятор конечно умная шайтан-машина, но не до такой степени.
Matrasa
0 / 0 / 0
Регистрация: 02.12.2010
Сообщений: 40
03.12.2010, 12:56  [ТС]     copy в Delphi, аналог на C++? #15
silent_1991, Так я и хочу работать со string, но как там сделать copy??

Код на си из википедии взять я могу, но он мне не понятен. Мне нужно ясно понимать что и как функция делает. Мне же потом все это надо будет делать с использованием ООП (а я смутно представляю что это такое) + писать хед файлы (тоже не знаю что это такое, но в программе по курсовой сказано) + все функции в отдельные файлы и т. д. и т. п. У меня в проге всего две основные функции, по перегону из арабских в римские (сделано) и обратно, математические операции можно в арабской системе счисления делать и конвертировать результат в Римские.

Как этот дельфи код портануть всетаки?
Kastaneda
Форумчанин
Эксперт С++
4263 / 2795 / 219
Регистрация: 12.12.2009
Сообщений: 7,122
Записей в блоге: 1
Завершенные тесты: 1
03.12.2010, 13:07     copy в Delphi, аналог на C++? #16
Можно же использовать просто операторы "+" и "+=", если они не подходят для решения задачи, тогда вот, там все ф-ции с примерами, ищем то, что нужно.
Вот пример использования copy()
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// string::copy
#include <iostream>
#include <string>
using namespace std;
 
int main ()
{
  size_t length;
  char buffer[20];
  string str ("Test string...");
  length=str.copy(buffer,6,5);
  buffer[length]='\0';
  cout << "buffer contains: " << buffer << "\n";
  return 0;
}
Output:
Код
Buffer contains: string
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2010, 14:19     copy в Delphi, аналог на C++?
Еще ссылки по теме:

Аналог SetLength(x, Length(x)+1) из Delphi в C++ C++
Написать аналог процедуры Insert. Процедурой Delete и функцией Copy не пользоваться C++
Перегрузка copy() C++
C++ Copy constructor
C++ Алгоритм copy

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

Или воспользуйтесь поиском по форуму:
Matrasa
0 / 0 / 0
Регистрация: 02.12.2010
Сообщений: 40
03.12.2010, 14:19  [ТС]     copy в Delphi, аналог на C++? #17
Ребята, всем спасибо за ваше участие. В конце концов психанул и решил использовать код на c++ из вики. Думаю со временем разберусь + он у меня заработал таки. А еще я врубился в *char, незнаю как, но он работает, и принимает строки произвольной длинны.

Извините за то что вас мучил
Yandex
Объявления
03.12.2010, 14:19     copy в Delphi, аналог на C++?
Ответ Создать тему
Опции темы

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