// Хоть убейте, не помню как в сишнике с буленами... )))
boolean isWord = FALSE;
int chars = 0;
for (int i = n; i >= 1; i--)
{
if ((!isWord) && (s != ' '))
{
isWord = TRUE;
chars = 1;
continue;
}
if (isWord)
if (s = ' ')
{
isWord = FALSE;
break;
}
else
{
chars++;
}
}
/С++/вычислить кол-во букв в последнем слове строки
[SIZE=2][FONT=Times New Roman]1. Даны натуральное число n, s1, …, sn. Группы символов, разделённые пробелами(одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами.[/FONT][/SIZE]
[SIZE=2][FONT=Times New Roman]Подсчитать количество букв а в последнем слове данной последовательности.[/FONT][/SIZE]
1
Код:
const int n = 14;
int count = 0;
char s[n+1] = "abc dfrt asder";
for(int i = n - 1; i >= 0 && s != ' '; i--)
count++;
int count = 0;
char s[n+1] = "abc dfrt asder";
for(int i = n - 1; i >= 0 && s != ' '; i--)
count++;
Цитата:
Хоть убейте, не помню как в сишнике с буленами... )))
в С++ вполне хорошо, имеются, только не [COLOR=blue]boolean[/COLOR] , а [COLOR=blue]bool [COLOR=black](true, false).[/COLOR]
[/COLOR]индексация в С языках начинается с нуля, поэтому последний индекс равен n - 1
Код:
const int n = 14;
int Count = 0;
char String[n+1] = "asdkj ksd assa";
for (int i = n; i >= 0 && String != ' '; i--)
if (String == 'a')
Count++;
int Count = 0;
char String[n+1] = "asdkj ksd assa";
for (int i = n; i >= 0 && String != ' '; i--)
if (String == 'a')
Count++;
Спасибо всем!
[quote=OlgaKr]индексация в С языках начинается с нуля, поэтому последний индекс равен n - 1[/quote]Я знаю, просто в задании первый индекс стои 1 и последний n. Я уж для единообразия :)
OlgaKr, или меня глючит с просоня, или все-таки в Вашем кусочке кода не учитывается, что строка может кончаться пробелом...
А сама идея внести одно из условий в for - отличная :)
да, не учитывается :). автор помоему об этом ничего не пишит, строки обычно пробелом не заканчивают. если надо проверка - ещё один цикл с конца организовать не проблема, можно функцию Трим написать :), а вообще, студент может что то и сам написать - полезно для подготовки к экзаменам.
Цитата:
а вообще, студент может что то и сам написать - полезно для подготовки к экзаменам.
Это точно!
Маленький юнион предложенных вариантов. Функция, подсчитывающая количество вхождений указанного символа в последнем слове строки (с учетом замыкающих пробелов). Если символ не указан, то возвращает размер последнего слова.
Код:
int calchar( char* str, char tok = '\0' )
{
char* ptr = str;
while( *(++ptr) ); // перемещаемся в конец строки
while( *(--ptr) == ' ' ); // становимся на первый (с конца) символ, отличный от пробела
int ncount = 0;
while( *ptr-- != ' ' && ptr != str )
{
if( tok && *ptr != tok )
continue;
ncount++;
}
return ncount;
}
{
char* ptr = str;
while( *(++ptr) ); // перемещаемся в конец строки
while( *(--ptr) == ' ' ); // становимся на первый (с конца) символ, отличный от пробела
int ncount = 0;
while( *ptr-- != ' ' && ptr != str )
{
if( tok && *ptr != tok )
continue;
ncount++;
}
return ncount;
}
Update: Выяснилось, что ранняя функция не срабатывала в случаях, когда слово заканчивалось искомым символом, и если строка состояла из одного слова и начиналась искомым символом. Поэтому - еще вариант.
Код:
int calchar( char* str, char tok = '\0' )
{
char* ptr = str;
while( *(++ptr) );
while( *(--ptr) == ' ' );
int ncount = 0;
do
{
if( tok && *ptr != tok )
continue;
ncount++;
} while( *ptr-- != ' ' && ptr != (str - 1) );
return ncount;
}
{
char* ptr = str;
while( *(++ptr) );
while( *(--ptr) == ' ' );
int ncount = 0;
do
{
if( tok && *ptr != tok )
continue;
ncount++;
} while( *ptr-- != ' ' && ptr != (str - 1) );
return ncount;
}
P.S. Можно еще более оптимально придумать.
Когда поинтер вылезет за границу строки - он станет нулевым, я правильно понял? А это логически эквивалентно фэлсу.
Цитата: Ivanhoe
Один вопрос...
Когда поинтер вылезет за границу строки - он станет нулевым, я правильно понял? А это логически эквивалентно фэлсу.
Когда поинтер вылезет за границу строки - он станет нулевым, я правильно понял? А это логически эквивалентно фэлсу.
Нет. Он просто будет указывать не на строку.
Код:
while( *(++ptr) );
Ну, если я не ошибаюсь, то строчки нулем заканчиваются? В смысле тем самым \0? А для char это просто ноль, поскольку chat вроде как числовой
тип. И 0 == FALSE. Я правильно выстроил цепочку рассуждений?
Цитата: Ivanhoe
Я вот к чему:
Ну, если я не ошибаюсь, то строчки нулем заканчиваются? В смысле тем самым \0? А для char это просто ноль, поскольку chat вроде как числовой
тип. И 0 == FALSE. Я правильно выстроил цепочку рассуждений?
Код:
while( *(++ptr) );
Ну, если я не ошибаюсь, то строчки нулем заканчиваются? В смысле тем самым \0? А для char это просто ноль, поскольку chat вроде как числовой
тип. И 0 == FALSE. Я правильно выстроил цепочку рассуждений?
Правильно. В данном коде, цикл остановится, когда указатель "укажет" на замыкающий \0.
Если написать while( *ptr++ ), то указатель установится на следующий после \0 символ, поскольку инкремент здесь постфиксный.
Код:
while( *(ptr++) );
?
++a - это инкремент до проверки условия
a++ - после
Иль я опять туплю?
Вот до чего джава людей доводит, уже не помню, как такие вещи работают )) (/пошел пить йад/ :D)