Задачка на строки)!helppp)!
Ну а как ты думаешь? Конечно в преподе который не хочет зачет ставить за так. :D
или показывайте чего сами сделали - поможем вам советом и частично кодом, или пишите в личку - будем договариваться о цене!:D
#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 прости, лишил тебя обеда :)
#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, как код возврата.
Хотя... О каком успехе можно говорить в таком коде?
насчёт буфера незнаю, а вводить можно сколько угодно слов, пока не будет нажат enter ввод будет продолжаться
Ну так узнайте. Ведь несложно поставить эксперимент.
Определяем буфер небольшого размера, скажем всего 5 символов, и пробуем вводить строки разной длины.
cin >> string;
cout << string;
Смотрим, что получается. Если вводить не более четырёх символов (не забываем, что в конце строки запишется терминальный ноль), то всё нормально. При вводе большего количества, они будут записываться за пределами выделенного буфера. Поведение программы при этом непредсказуемо. Хорошо, если она просто вылетит, плохо, если продолжит работать в партизанском режиме.
Да, вводить можно сколько угодно слов, но этой строкой кода
cin >> string;
будет введено всего одно, до первого пробела (или Enter'а).
Попробуйте в вышеприведённом коде ввести, например, строку abc def - будет выведено abc.
Отмечу, что хотя вводится строка длиной в семь символов, в данном случае буфер не переполнится, поскольку в него поступит четыре символа: abc и в конце '\0'.
насчёт буфера незнаю, а вводить можно сколько угодно слов, пока не будет нажат enter ввод будет продолжаться
Зачем спорить?!
cin >> string;
будет введено всего одно, до первого пробела (или Enter'а).
Он абсолютно прав, будет вывод символов до первого разделителя. Как решить??
cout<<"Enter your name and surname: ";
cin.getline(buf,256);
для типа string:
cout<<"Enter your name and surname: ";
getline(cin,buf);