Проблемы со строками в Turbo C++

Мне нужно, чтобы код работал на Turbo C++. Но тип данных string не работает; использование пространства имен std дает ошибку компилятора, и я не могу использовать string без него. Даже std::string не работает.

Он отлично работает в Code::Blocks, но я хочу, чтобы он работал в Turbo C++. Я знаю, что Turbo — очень старый компилятор, и я должен использовать новые. Но это проект колледжа, который должен быть выполнен на Turbo C++. Есть ли способы заставить его работать в Turbo C++?


person user49557    schedule 03.11.2016    source источник
comment
Turbo C++ старый, действительно древний. Самое главное, что он создан до того, как С++ был стандартизирован, и поэтому не имеет стандартных заголовков или стандартного пространства имен. Если вам нужно использовать Turbo C++, вам нужно изучить предстандартные классы и заголовки. Ваш лучший шанс — взять старую книгу начала-середины 1990-х годов. И тогда вам придется жить с осознанием того, что многое из того, что вы узнаете, не будет действительно полезным в будущем, это будет пустой тратой времени.   -  person Some programmer dude    schedule 03.11.2016
comment
я знаю, что я должен сделать эту работу для кого-то, кто хочет, чтобы это было сделано в турбо С++   -  person user49557    schedule 03.11.2016
comment
@ Джордж, да, я сделал   -  person user49557    schedule 03.11.2016
comment
Тот, кто говорит вам, что это должно выполняться на Turbo C++, должен быть расстрелян.   -  person Hatted Rooster    schedule 03.11.2016
comment
Совет: задавая вопросы, не нужно писать каждое слово с заглавной буквы, его труднее читать. Просто используйте начальную и заглавную буквы для имен (например, Turbo C++).   -  person halfer    schedule 03.11.2016
comment
хорошо, я буду иметь это в виду   -  person user49557    schedule 03.11.2016
comment
Ваш колледж обдирает вас. Жаловаться. Кроме того, большинство пользователей здесь, вероятно, были в дошкольном возрасте, когда TC++ вышел из моды, и поэтому могут быть не очень знакомы с ним.   -  person n. 1.8e9-where's-my-share m.    schedule 03.11.2016
comment
не мой коллаж на самом деле мой клиент   -  person user49557    schedule 03.11.2016
comment
turboc.codeplex.com/wikipage?title=Examples Перейдите к их примерам и найдите чего тебе не хватает...   -  person Crazy Engineer    schedule 03.11.2016
comment
@user49557 user49557 У вас серьезно есть клиент, который все еще использует программное обеспечение, разработанное с помощью Turbo C++? Ну, я думаю, если программа работает... Я надеюсь надеюсь, что это устаревшее программное обеспечение, созданное более 20 лет назад, или, потому что все, что новее, должно было быть сделано с чем-то другим даже изначально.   -  person hyde    schedule 03.11.2016
comment
@Someprogrammerdude Если мне не изменяет память, я думаю, что пространство имен std поддерживалось еще в BC++ 3.1.   -  person Lundin    schedule 03.11.2016
comment
Следует иметь в виду одну вещь: C++ эпохи Turbo C — это, по сути, другой язык, чем C++ сегодня. Так что думай о них так. Конечно, у них много общего, старый в основном является (небольшим) подмножеством текущего, с некоторыми отличиями, но современный рекомендуемый стиль C++ и лучшие практики и так далее совершенно, совершенно разные.   -  person hyde    schedule 03.11.2016
comment
@George в стандартном C++ это должно быть <cstring>   -  person phuclv    schedule 03.11.2016
comment
@hyde да, у меня серьезно есть такой клиент   -  person user49557    schedule 03.11.2016


Ответы (6)


Это зависит от того, какая у вас версия Turbo C++. Немного археологии программного обеспечения:

Древние версии DOS до 3.1 не поддерживали ни STL, ни #include <string>. Они использовали предстандартные форматы включения с расширениями .h: #include <string.h> и т. д. Попробуйте добавить .h, и вам может повезти.

Где-то в версии 4 или 5.0 они начали поддерживать форматы заголовков #include <string> и большую часть STL. Это были еще предстандартные компиляторы.

Поддержка STL оставалась сомнительной в более ранних версиях Borland Builder, пока где-то около Builder 5. Это должна быть версия 5.5 или около того компилятора BCC.

Инструмент RAD под названием Turbo C++, выпущенный примерно в 2005 году, должен иметь полную поддержку C++98.

person Lundin    schedule 03.11.2016

Turbo C++ не поддерживает пространства имен.

Я думаю, вам нужно включить cstring.h и не использовать никакие пространства имен или даже директиву using.

#include <cstring.h>

И я не думаю, что он поддерживает шаблоны.

person user93353    schedule 03.11.2016
comment
cstring служит для строк с завершающим нулем (они же C-строки), а не std::string. OP, возможно, придется переписать весь код, чтобы использовать C-строки вместо std::string. - person Melebius; 03.11.2016
comment
@Melebius - cstring.h, а не cstring. - person user93353; 03.11.2016
comment
Я почти уверен, что это была string.h. cstring.h не даст вам std::string. - person Lundin; 03.11.2016

Совершенно невозможно заставить современный код C++ работать в Turbo C++ как есть. Многое нужно переписать.

Ничего std:: в turbo c++ нет. Там нет названий. Шаблонов нет. Существует очень мало того, что мы знаем как стандартную библиотеку. По сути, вам придется забыть большую часть того, что вы знаете о C++. Классы и функции в основном работают. Iostreams может немного работать, если вы #include <iostreams.h> (обратите внимание на .h) и опустите std::. В противном случае вы в значительной степени ограничены стандартной библиотекой C.

Если вам нужен строковый класс, вам, вероятно, придется создать свой собственный.

Действуйте осторожно, прочтите встроенную справку, изучите прилагаемые примеры программ, и, возможно, у вас все получится.

Обратите внимание, что более поздние версии продукта (не Turbo C++ IIRC, а Borland C++ или Borland Builder) имеют улучшенную поддержку C++98, включая стандартную библиотеку.

person n. 1.8e9-where's-my-share m.    schedule 03.11.2016

У меня была такая же проблема, потом я понял, что забыл using namespace std Это все решило.

person Glow    schedule 24.09.2018

Вместо String вы можете использовать массив символов. Например, нам нужно объявить переменную str как строку. Это можно сделать просто так:

char a[10]; // the 10 is the size of the array.

Для использования библиотечных функций включен отдельный заголовочный файл.

person Ayosh Maitra    schedule 22.02.2017

Хорошо, после долгих хлопот я нашел способ. К сожалению, вы не можете использовать string и другие подобные типы данных, поскольку они даже не были реализованы в то время. Вам нужно делать то, что раньше делали. Используйте массив char вместо string и создайте функции, связанные с этим.

Теперь массив char имеет много ограничений и проблем, поэтому был реализован string. Но вы должны написать функции массива char так же, как string была написана с нуля.
Если вы хотите сравнить или скопировать два массива символов, вы должны зациклить и сравнить их. Это будет немного сложно, но это лучший способ, который сработал для меня.

Я могу дать пример кода для определенной задачи, если это необходимо.

person user49557    schedule 10.11.2016