Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Задачка на строки)!helppp)!

52K
17 июня 2010 года
pezz
7 / / 20.12.2009
2. Ввести символьную строку. Посчитать количество слов в предложении. Если не одно слово, то переписать второе слово справа налево. Вывести преобразованную строку(Дополнительных строк не использовать!!!! При выводе строк использовать ф-цию puts).
11
17 июня 2010 года
oxotnik333
2.9K / / 03.08.2007
и в чем проблема?
5
17 июня 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: oxotnik333
и в чем проблема?


Ну а как ты думаешь? Конечно в преподе который не хочет зачет ставить за так. :D

307
17 июня 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: pezz
2. Ввести символьную строку. Посчитать количество слов в предложении. Если не одно слово, то переписать второе слово справа налево. Вывести преобразованную строку(Дополнительных строк не использовать!!!! При выводе строк использовать ф-цию puts).



или показывайте чего сами сделали - поможем вам советом и частично кодом, или пишите в личку - будем договариваться о цене!:D

3.8K
26 июня 2010 года
hex
58 / / 31.10.2004
Думаю, что проблемма все-таки не в преподе, а в ваших знаниях. :)

#include <stdio.h>
#include <windows.h>
#include <iostream.h>

int main()
{
char string[256];
char save;
char * result;
int word_counter = 0;
int lenght;

cout << "Enter a string: ";
cin >> string;

result = strtok(string," ");

while (result != 0) {
word_counter++;
if (word_counter == 2) save = *result;
printf("\n%s\n", result);
result = strtok (0, " ");
}

lenght = strlen(&save);
if (0 != lenght)
for (; lenght>0; lenght--)
cout << string[lenght] << endl;

return 0;
}

не компилил. где-то вроде єтого. отладка вам как задание))

p.s.: Artem_3A прости, лишил тебя обеда :)
297
26 июня 2010 года
koodeer
1.2K / / 02.05.2009
Цитата: hex
Думаю, что проблемма все-таки не в преподе, а в ваших знаниях. :)

#include <stdio.h>
#include <windows.h>
#include <iostream.h>

int main()
{
char string[256];
char save;
char * result;
int word_counter = 0;
int lenght;

cout << "Enter a string: ";
cin >> string;

result = strtok(string," ");

while (result != 0) {
word_counter++;
if (word_counter == 2) save = *result;
printf("\n%s\n", result);
result = strtok (0, " ");
}

lenght = strlen(&save);
if (0 != lenght)
for (; lenght>0; lenght--)
cout << string[lenght] << endl;

return 0;
}

не компилил. где-то вроде єтого. отладка вам как задание))

p.s.: Artem_3A прости, лишил тебя обеда :)



О_О

Сперва глянул мельком. Увидев cout решил попенять, - ведь в задании сказано, что вывод нужно делать через puts. Функция printf тоже не в тему.

Решил посмотреть код внимательно.
ОМГ! Если топикстартер отладит код, и заставит его работать, - плюсану, ей-богу!
Огрехов столько, что я даже не знаю, с чего начать.

По порядку:
Таки на каком языке это написано: С или С++?

iostream.h - ".h" <- устарело давным-давно, уж с десяток лет. Юзайте современные среды разработки, отвечающие современным стандартам! И соответственно в С++ нельзя забывать о пространстве имён std.

lenght - English Grammar Nazi resents! length же!

cin >> string; тут сразу две ошибки: во-первых, может быть переполнение буфера; во-вторых, введётся всего одно слово. Строку с пробелами так ввести не получится.

Замечания:
Функция strtok давно считается устаревшей, и использовать её нежелательно.
Условие if (word_counter == 2) лучше записать в виде if (2 == word_counter) - так нельзя ошибиться, написав знак '=' вместо '==' - константе невозможно присвоить значение.
Вместо нолей лучше использовать NULL (пока ещё nullptr не везде применимо).

Допустим, ввод исправили, вводится строка. Едем дальше.

save = *result; - здесь в переменной типа char сохранится первый символ второй строки, а не указатель на эту строку! Так что дальнейшие действия, основанные на этом предположении, бессмысленны.

lenght = strlen(&save); - варнинг - несовпадение типов. Желательно писать программы так, чтобы предупреждений не было совсем.

if (0 != lenght) - за это условие хвалю - константа впереди. Ненароком знак = не поставить. Хотя можно просто if (lenght)...

Условие lenght>0; в цикле for неверно: будет выводиться на один символ меньше, чем нужно! Должно быть lenght>=0;
Ещё одна ошибка в этом же цикле: string[lenght] - ну и что тут будет выводиться? Должно быть save[lenght]

И к тому же, как мне кажется, нужно вывести всю строку с перевёрнутым вторым словом. Ну, это не суть важно.

Ещё замечание. Есть такое понятие, как время жизни переменной. И чем оно меньше, тем лучше. Объявляться переменные должны перед самым использованием. Вынесение всех их в начало функции - неправильно!

Может ещё чего упустил...
Ну, ещё можно word_counter перенести внутрь цикла, объявив её static, ведь снаружи цикла эта переменная не используется.
Да, можно EXIT_SUCCESS поставить вместо 0, как код возврата.
Хотя... О каком успехе можно говорить в таком коде?

60K
15 июля 2010 года
Romiks
3 / / 11.07.2010
cin >> string; тут сразу две ошибки: во-первых, может быть переполнение буфера; во-вторых, введётся всего одно слово. Строку с пробелами так ввести не получится.

насчёт буфера незнаю, а вводить можно сколько угодно слов, пока не будет нажат enter ввод будет продолжаться
297
15 июля 2010 года
koodeer
1.2K / / 02.05.2009
Цитата: Romiks
насчёт буфера незнаю


Ну так узнайте. Ведь несложно поставить эксперимент.
Определяем буфер небольшого размера, скажем всего 5 символов, и пробуем вводить строки разной длины.

 
Код:
char string[5];
cin >> string;
cout << string;

Смотрим, что получается. Если вводить не более четырёх символов (не забываем, что в конце строки запишется терминальный ноль), то всё нормально. При вводе большего количества, они будут записываться за пределами выделенного буфера. Поведение программы при этом непредсказуемо. Хорошо, если она просто вылетит, плохо, если продолжит работать в партизанском режиме.

Цитата: Romiks
вводить можно сколько угодно слов, пока не будет нажат enter ввод будет продолжаться


Да, вводить можно сколько угодно слов, но этой строкой кода
cin >> string;
будет введено всего одно, до первого пробела (или Enter'а).

Попробуйте в вышеприведённом коде ввести, например, строку abc def - будет выведено abc.
Отмечу, что хотя вводится строка длиной в семь символов, в данном случае буфер не переполнится, поскольку в него поступит четыре символа: abc и в конце '\0'.

392
21 июля 2010 года
cronya
421 / / 03.01.2009
Цитата: Romiks
cin >> string; тут сразу две ошибки: во-первых, может быть переполнение буфера; во-вторых, введётся всего одно слово. Строку с пробелами так ввести не получится.

насчёт буфера незнаю, а вводить можно сколько угодно слов, пока не будет нажат enter ввод будет продолжаться

Зачем спорить?!

Цитата: koodeer
Да, вводить можно сколько угодно слов, но этой строкой кода
cin >> string;
будет введено всего одно, до первого пробела (или Enter'а).


Он абсолютно прав, будет вывод символов до первого разделителя. Как решить??

 
Код:
char buf[256];
cout<<"Enter your name and surname: ";
cin.getline(buf,256);

для типа string:
 
Код:
string buf;
cout<<"Enter your name and surname: ";
getline(cin,buf);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог