Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Проблема со строками в С++

Автор: ninja 22.03.2010 17:22

Добрый день ! Изучая язык С++ после Паскаля столкнулся с такой проблемой: Необходимо написать программу в которой при вводе строки вводятся ограничения. Само задание :

Вводится тест из заглавных и строчных латинских букв, пробелов. Количество символов в тексте не должно превышать 200. Слова разделяются пробелами. Определить и вывести слова, начинающиеся и заканчивающиеся одной и той же буквой.

Скачал массу книг по С++ преподователь рекомендавал книгу Бьерна Страуструпа, начал ее читать по- началу показалось не сложной, но затем пробуя примеры из книги столкнулся с такими проблемами во многих книгах написано что есть такой тип данных string который находится в библиотеке string.h, и тип boolean <bool> но как я понят как такового типа string нет, есть массив символов т.е это конечно string это и есть массив символов, только объявление по-другому char str[200] если я не прав поправте пожалуйста, а то совсем запутался. Толи это зависит от компилятора, толи от версии... я пишу на Turbo C++ Ver 3.0

Идея решения моей задачи такова, считывать каждый раз 1 символ и прибавлять его в массив символов, задача заключается именно в том чтобы самому написать функцию ограничивающую ввод.

#include <conio.h>
#include <iostream.h>

proverka()
{
char ch[1];
char ch1[200];
int k=1;

do
{
//scanf("%s",&ch);
cin >> ch;
ch1[k]=ch[1];
k++;
ch1[200]=NULL;
}
while (k!=10);
return 0;
}

void main ()
{
clrscr();
proverka();
getch();
}


только каждый раз приходится нажимать кнопку ENTER, думал прибавлять к считываемому символу еще код ENTER'a #13 но ничего не получается.

и почему то ошибка не могу понять почему, т.е если делать по шагам, то на строке ch1[k]=ch[1]; в переменную ch1[k] попадает совсем не то значение.

Спасибо за помощь.

Автор: volvo 22.03.2010 17:47

Цитата
во многих книгах написано что есть такой тип данных string который находится в библиотеке string.h, и тип boolean <bool> но как я понят как такового типа string нет, есть массив символов
Есть еще такое понятие, как разные компиляторы. Старые и новые. Так вот в любом новом компиляторе можно подключить

#include <string>
// и потом работать с типом std::string


Turbo C++ 3.0 - это уже очень устаревший компилятор, там естественно этого нет.

Цитата
задача заключается именно в том чтобы самому написать функцию ограничивающую ввод.
Можно разъяснить, в чем именно задача? Что ограничивать? Зачем ограничивать? Ограничение - это чтобы нельзя было ввести больше 200 символов? Или еще что-то есть?

Не надо ничего придумывать. Задача у тебя - вывести слова, которые начинаются и заканчиваются на одну и туже букву. Про написание функции, ограничивающей ввод ничего не сказано. Поиск по форуму по словам gets и strtok приведет тебя к посту в котором я досконально разжевывал процесс разбиения строки на слова.

Автор: ninja 22.03.2010 17:53

Задача заключается в том, чтобы нельзя было ввести больше 200 символов, т.к. преподователь дополнил задание. Ага спасибо пойду искать.

Автор: volvo 22.03.2010 20:03

#include <iostream.h>

int main()
{
char s[10] = {0};
cin.getline(s, 9);

cout << s << endl;
return 0;
}

Вводи хоть 256 символов с клавиатуры. Прочитается максимум столько, сколько указано вторым параметром в getline. Или, если нажмешь Enter раньше чем 9 символов - то будет прочитано сколько есть.

Или тебе надо, чтобы вообще нельзя было набрать больше 200 символов? Тогда тебе надо вручную читать и собирать строку через getch, одновременно подсчитывая количество введенных символов.

Автор: ninja 22.03.2010 20:06

Да, нужно чтобы вообще нельзя было набрать 200 символов. Извиняюсь за неверное объяснение проблемы.