PDA

Показать полную графическую версию : Слово написанное больше всех


Vunderkind
05-11-2010, 07:11
Надо написать функцию которая выводит последнее слово.Первая строка должна содержать одну линию, что является не более 1000 знаков с пробелами и вывод должен быть только слова с большими буквами.Прога не должна быть чувствительна к регистру(т,е если последовательность заканчивается на Can, то выводить CAN, если на can то тоже выводить CAN )
Ввод
Wert works and Buffalo
Вывод
BUFFALO
---------------------------------------------------------------------------------------------
Ввод
Can you can the can with can ?
Вывод
CAN

Vunderkind
05-11-2010, 07:30
Извините Админ,я неправильно написал тему задачи,оно почему то у вас не редактируется

lxa85
05-11-2010, 12:14
Vunderkind, какие будут предложения по поиску этого самого последнего слова?
Как оно вообще определяется - последнее слово?
Всмысле буквально, как термин, что оно обозначает?
Последнее слово - это ...
Как только этот термин будет определен, решать задачу станет намного проще.

Vunderkind
06-11-2010, 16:43
Вот код который я написал
#include <iostream>

using namespace std;

int main()
{
int a;
char ch[1000];
cin.getline(ch,1000);

for (int i=0; i<strlen(ch); i++)
{
if (ch[i]==' ')
a=i;}
for (int i=a+1; i<strlen(ch); i++)
{
if (islower(ch[i]))
ch[i]=toupper(ch[i]);
if(isalpha(ch[i]))
cout << ch[i];
}
cout<<" ";
return 0;
}

но этот код не работает если последовательность окончивается на символы.Например:если вводить Can you can the can with can ? то оно не выводить ничего

lxa85
07-11-2010, 02:44
Vunderkind, я тебя не зря попросил дать определение "последнему слову".
Пока ты четко не напишешь что ты ищешь и не поймешь суть, ты будешь продолжать "тыкаться носом в стенку".
Если делать "заплатку" к данному коду, то вводи еще проверки.
И да, прокомментируй код.

Vunderkind
07-11-2010, 08:38
Извините,я не правильно взял пример,и нет никакого определения "последнее слова"Вот правильный пример:
Вводим
Apple arm Test (здесь "Test"является последним словам в последовательности)
Выводит
TEST(и выводит слова большими буквами)
Вводим
Enter qwerty goal !(если кончается на символы то все равно выводит посл. слова т.е goal)
Выводит
GOAL

lxa85
07-11-2010, 08:44
Так, ладно, пойдем с другой стороны.
Ответь, на вопрос "Что ты делаешь?" или "Что тебе надо сделать?" простыми словами, не касаясь программирования и кодов.
Чтобы пятиклашка тебя понял.

P.S. Сейчас главное не ерепенься(если чего), а правильно отвечай на вопросы. Их тут 5 от силы. После чего свою ошибка тебе станет прозрачна до нЕльзя.

Vunderkind
07-11-2010, 10:01
Хорошо,кажется у меня не получится найти с тобой общий язык.У меня тебе только 1 вопрос, есть ли что-нибудь которое определяет символ?

lxa85
07-11-2010, 10:36
по ASCII кодам и по порядковому номеру?
Банальным сравнением с заданным набором?
символ - это все что НЕ символ?

hackroute
07-11-2010, 12:52
определись что есть слово, затем что есть последнее к примеру:

"Apple arm Test"
Выводит
"TEST"

Вводим
"Enter qwerty goal !"
Выводит
"GOAL"

а вот если так

Вводим
"Enter qwerty goal1 ?"
Выводит
"GOAL" или "GOAL1" или "QWERTY"

Вводим
"Enter qwerty goal fuck!!!me !"
Выводит
"GOAL" или "FUCK!!!ME" или "ME" вот когда определишься сможешь создать проверку на то является ли слово "словом", и соответственно получишь нужный результат, надо получить ординальное значение символа ORD(string[i]) затем сравнить входит ли он в допустимые пределы например "A".."Z" и "a".."z" (их ординальные значения соответственно: 65..90 и 97..122)
если не входит то надо определить что с этим символом делать, надо ли его вырезать из слова или игнорировать слово или еще что, определи задачу еще конкретней тогда появится решение, так же незабудь про проверку на то действительно ли в строке 1000 символов, а вдруг больше ? крит тогда чтоли?
(аж потянуло на программинг, установил сишарп :)


это если для каждой строки надо находить последнее слово


public static byte Ord(char ch) { return System.Convert.ToByte(ch); }
public static bool ismychar(char code)
{bool result = false;
if (((Ord(code) >= 65) && (Ord(code) <= 90)) || (((Ord(code) >= 97) && (Ord(code) <= 122))))
result = true;
return result;
}
private void button1_Click(object sender, EventArgs e)
{
int i, j;
for (i = 0; i< listBox1.Items.Count; i++)
{string lastword = "";
string temps = "";
string s = listBox1.Items[i].ToString();
for (j = 0; j < s.Length; j++)
{
if (ismychar(s[j])) { temps = temps + s[j]; }
else {if (s[j].ToString() == " ") {if (temps.Length > 0) lastword = temps; temps = "";}}}
if (temps.Length > 0) lastword = temps;
if (lastword.Length > 0) { listBox2.Items.Add(lastword.ToUpper());
};
}


в твоем же алгоритме если пробел был перед вопросом "ффф ?" то конечно он ничего не выведет ведь нету символов после пробела для выведения, надо сохранять последнее найденое слово "temps.Length > 0) lastword = temps;" и обнулять временую переменную для поиска следующего "temps = "";", либо тебе надо обнулять переменную когда после пробела найден первый символ подходящий под условия "буквы слова" если обнаружен пробел это ведь еще не значит что за ним есть слово

Drongo
07-11-2010, 20:06
Оформляйте свой код тегами - #

в противном случае тема уйдёт в тест-зону!




© OSzone.net 2001-2012