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

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

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

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

02.12.2010, 07:21. Просмотров 5347. Ответов 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), как мне заставить их работать с типом стринг?

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

Аналог функции copy из делфи для string в С++ - C++
Предположим у нас есть 2 переменные типа string. Как из 1й скопировать часть в другую? К примеру в делфи это так: var ...

Написать аналог процедуры Insert. Процедурой Delete и функцией Copy не пользоваться - C++
Добрый день. Помогите пожалуйста решить 2 задачи 1. Написать аналог процедуры Insert. Процедурой Delete и функцией Copy не пользоваться.

Deep copy and Shadow copy - C++
Этот проект компилируется нормально. И функциональность всех элементов на первый взгляд нормальная. ПРОБЛЕМА: Надо сделать нормально =...

Аналог SetLength(x, Length(x)+1) из Delphi в C++ - C++
Привет. Сабж. В Delphi можно таким образом работать с массивом: Объявление: x: array of Integer; Работа с массивом: SetLength(x,...

Аналог функции, которая используется в Delphi strtoint/inttostr - C++
есть ли в С++ аналог функции , которая используеться в Delphi strtoint/inttostr.И как она используеться???

Copy constructor - C++
#include "stdafx.h" #include <iostream> using namespace::std; class alpha{ int data; public: alpha() {} alpha(int d) :...

16
DiakonX
63 / 11 / 1
Регистрация: 15.11.2010
Сообщений: 29
02.12.2010, 08:24 #2
а суть этих строк, а то чет не совсем понятна задумка? Может можно проще сделать. Опишите что нужно.

А вообще для переведа string в char в классе string есть специальный метод c_str.
0
Matrasa
0 / 0 / 0
Регистрация: 02.12.2010
Сообщений: 40
02.12.2010, 08:38  [ТС] #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.
Ок, спасибо, погуглим.
0
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
02.12.2010, 10:35 #4
код на паскале из википедии взяли, а для с++ оттуда уже сами не смогли?
http://ru.wikipedia.org/wiki/%D0%A0%...84.D1.80.D1.8B
0
Kastaneda
Нарушитель
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,314
Записей в блоге: 2
Завершенные тесты: 1
02.12.2010, 11:19 #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());
0
Matrasa
0 / 0 / 0
Регистрация: 02.12.2010
Сообщений: 40
02.12.2010, 11:29  [ТС] #6
Kastaneda,

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

error C2664: 'strcpy' : cannot convert parameter 1 from 'const char *' to 'char *'
0
Kastaneda
Нарушитель
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,314
Записей в блоге: 2
Завершенные тесты: 1
02.12.2010, 11:34 #7
Цитата Сообщение от Matrasa Посмотреть сообщение
Привык к string в Delphi, и не пойму почему в Си им не пользуются
Потому, что Си более низкий язык, чем Delphi.
0
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
02.12.2010, 16:04 #8
Kastaneda, поправочка - более низкоуровневый. А то "низкий" звучит так, как будто он, извиняюсь, Г.
0
Matrasa
0 / 0 / 0
Регистрация: 02.12.2010
Сообщений: 40
03.12.2010, 07:22  [ТС] #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
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
03.12.2010, 08:08 #10
Matrasa, А посмотреть что это за функция слабо было?
string::copy
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
03.12.2010, 11:55 #11
Цитата Сообщение от Matrasa Посмотреть сообщение
Kastaneda,



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

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

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

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

Как этот дельфи код портануть всетаки?
0
03.12.2010, 12:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2010, 12:56
Привет! Вот еще темы с ответами:

алгоритм copy - C++
copy(v.begin(), v.end(), ostream_iterator&lt;char&gt;(cout, &quot; &quot;)); - копирует последовательность v.begin(), v.end() в выходной поток, а как...

Перегрузка copy() - C++
Здравствуйте, уважаемые. Пробую создать копию библиотечной функции copy(): template&lt;class Iter1, class Iter2&gt; Iter2 temp_copy(Iter1 first,...

this и Copy-Constructor - C++
Скажите пожалуйста почему даный еод вызывает RTE(Run Time Error) Добавлено через 1 минуту Engine engg(*this); Где this...

Вывод с copy - C++
Не могли бы вы показать/рассказать про вывод, например, массива, с использованием не std:: cout &lt;&lt; , а std::copy и что-то там еще....


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

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

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