Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
LILIE
1

функция с указателем

14.11.2012, 12:55. Показов 5976. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
насколько я поняла, то нужно с помощью функции(при этом используя указатели) написать код, который заменяет строчные буквы на заглавные
перевод задания особо не поняла, если что, то вот:

Write a function that will find and return most recent word in the given text.
The prototype of the function have to be the following void mostRecent(char *text,char *word)
In char *word your function hav.e to return the most recent word that occurce in the text.
Your program have to be not case-sensitive(ignore case - "Can" and "CAN" are the same words)
Also note than WORD is sequence of letters sepereated by whitespace
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2012, 12:55
Ответы с готовыми решениями:

функция с указателем
Плз, помогите.... :wall::help: надо написать на языке С Написать и протестировать функцию STRP (...

Функция с указателем на void** не получается вернуть данные?
Здорова! Есть код: #include <iostream> using std::cout; struct IMotion { virtual int&...

Передача параметров в функцию по указателю. Функция с указателем
Функция должна уменьшать значение первого и второго параметров в количество раз указанных в...

Указатели на функцию. Задача 2: функция предикат с void указателем
Сумму элементов массива, лежащих в пределах (a <b)

10
54 / 54 / 10
Регистрация: 26.09.2011
Сообщений: 186
14.11.2012, 13:07 2
Написать функцию, которая будет искать и возвращать "most recent" слово в заданном тексте. Прототип функции должен быть следующим:
C++
1
void mostRecent(char *text,char *word);
Параметр - char *word - сюда функция должна возвращать "most recent" слово, встречающееся в тексте. Программа не должна быть регистро зависимой (т.е. слова "Can" и "CAN" это одно и тоже слово). Любое слово - это последовательность символов, разделенных пробелом.

Как я понял, то здесь не нужно заменять строчные буквы на заглавные. Нужно возвратить какое-то слово. Не могу понять, что подразумевают под most recent
0
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
14.11.2012, 13:10 3
Цитата Сообщение от LILIE Посмотреть сообщение
The prototype of the function have to be the following void mostRecent(char *text,char *word)
In char *word your function hav.e to return the most recent word that occurce in the text.
Your program have to be not case-sensitive(ignore case - "Can" and "CAN" are the same words)
Also note than WORD is sequence of letters sepereated by whitespace
Вкратце вроде так: написать функцию принимающую С-строку через первый параметр и возвращающую наиболее часто встреченное в ней слово во второй параметр, тоже в С-строку (через указатель на char).
Прототип:
void mostRecent(char *text, char *word);
0
24 / 22 / 5
Регистрация: 13.11.2012
Сообщений: 49
14.11.2012, 13:11 4
совсем не правильно поняла, тут написано, что программа должна быть нечувствительна к регистру, т.е. слова Can и CAN для нее должны считаться одинаковыми словами. А вообще она должна возвращать слово из всего текста
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
14.11.2012, 13:41 5
Цитата Сообщение от denys_l Посмотреть сообщение
Не могу понять, что подразумевают под most recent
Цитата Сообщение от Pavell Посмотреть сообщение
А вообще она должна возвращать слово из всего текста
Цитата Сообщение от IGPIGP Посмотреть сообщение
возвращающую наиболее часто встреченное в ней слово
Где вы английский учили? Функция должна возвращать указатель на позицию последнего слова в тексте.
1
54 / 54 / 10
Регистрация: 26.09.2011
Сообщений: 186
14.11.2012, 13:47 6
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Где вы английский учили? Функция должна возвращать указатель на позицию последнего слова в тексте.
Исхогдя из контекста было бы уместней написать the last word...
0
24 / 22 / 5
Регистрация: 13.11.2012
Сообщений: 49
14.11.2012, 15:21 7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Где вы английский учили?
он у меня родной
подумаешь "последнее" пропустил, ну и да не само слово возвращать, а указатель на него (тут виноват)
0
denys_l
14.11.2012, 15:25
  #8

Не по теме:

в принципе, можно было по прототипу догадаться, какое слово возвращать...

0
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
14.11.2012, 16:21 9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Где вы английский учили? Функция должна возвращать указатель на позицию последнего слова в тексте.
Верно, resent, действительно последний. Спасибо. Что касается типа возврата, то делается же он в процедурном С-стиле. То есть строго говоря функция не имеет типа возврата или др. сл., имеет тип void. Второй параметр - указатель на чар и ему присваивается результат, так что с этим всё верно.
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
14.11.2012, 16:27 10
Цитата Сообщение от IGPIGP Посмотреть сообщение
Верно, resent, действительно последний. Спасибо. Что касается типа возврата, то делается же он в процедурном С-стиле. То есть строго говоря функция не имеет типа возврата или имеет тип void. Второй параметр - указатель на чар и ему присваивается результат, так что с этим всё верно.
Я тут задумался и понял, что был не прав насчёт "указатель на позицию последнего слова в тексте". Если мы в функции мы найдём, что посл.слово начинается с 7го символа, то согласно моему ответу должны будем сделать word=text+7; и выйти из функции. Но это не верно, т.к. значение переданного аргумента не изменится после выхода из функции. Нужно именно что возвращать копию последнего слова в тексте делать strncpy(word, text+7, n); и выйти из функции.
1
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
14.11.2012, 20:33 11
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Я тут задумался и понял, что был не прав насчёт "указатель на позицию последнего слова в тексте". Если мы в функции мы найдём, что посл.слово начинается с 7го символа, то согласно моему ответу должны будем сделать word=text+7; и выйти из функции. Но это не верно, т.к. значение переданного аргумента не изменится после выхода из функции. Нужно именно что возвращать копию последнего слова в тексте делать strncpy(word, text+7, n); и выйти из функции.
Думаю можно выяснить длину (*text) потом установить word на конец text пройти цикл while декрементируя word пока не встретим "непробел" и потом еще один цикл пока не встретим пробел. Инкриментируем до break и в этом случае. И всё. И в обоих случаях совмещаем проверку с проверкой на валидность (вдруг строка из пробелов или одного слова)

Добавлено через 2 часа 3 минуты
Строго прототипу не получается. Просто решается если передать указатель на указатель.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<string>
#include <iostream>
using namespace std;
void mostRecent(char *text,char **word);
 
int main(){
    setlocale(0, "rus");
const int sz=1000;
string inpStr;
char buf[1000];
char* text;
cout<<"Введите строку до "<<sz<<" символов ";
text=   gets(buf);
cout<<"\nВвелено:\t"<<text;
char* word=text;
mostRecent(text, &word);
cout<<"\nЗаднее слово поцака - :\t"<<word<<"\nКю!";
std::cout << std::endl;
std::system("pause");
return 0;    
}
void mostRecent(char *text,char **word){
int textLen=0;
 
while(text[textLen]){
textLen++;
}
if(textLen&&textLen!=1){
for(int i=textLen-1;i>0; i--){
if(text[i]==' '){
*word=&text[i+1];
    break;
}
}
}else{
return;
}
return;
}


Добавлено через 1 час 26 минут
Вот так в соответствии с прототипом. Прав Kuzia domovenok копию и нужно присвоить.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include<string.h>
#include <iostream>
using namespace std;
void mostRecent(char *text,char *word);
int main(){
    setlocale(0, "rus");
const int sz=1000;
string inpStr;
char buf[sz];
char* text;
cout<<"Введите строку до "<<sz<<" символов ";
text=   gets(buf);
cout<<"\nВведено:\t"<<text;
char* word=new char[sz];
mostRecent(text, word);
cout<<"\nПоследнее слово - :\t"<<word;
std::cout << std::endl;
std::system("pause");
return 0;    
}
void mostRecent(char *text,char *word){
int textLen=0;
 
while(text[textLen]){
textLen++;
}
strcpy(word,&text[textLen]);
int ind=0;
if(textLen&&textLen!=1){
for(int i=textLen-2;i>0; i--){
if(i!= textLen-1 && (text[i]==' '&&text[i+1]==' ')) continue;
if(text[i]==' '){
ind=i+1;
    break;
}
}
}else{
cout<<"\nПоследнее слово - :\t";
std::cout << std::endl;
std::system("pause");
exit(1);
}
strcpy(word,&text[ind]);
return;
}
Добавлено через 10 минут
Думаю можно выяснить длину (*text) потом установить word на конец text пройти цикл while декрементируя word пока не встретим "непробел" и потом еще один цикл пока не встретим пробел. Инкриментируем до break и в этом случае. И всё. И в обоих случаях совмещаем проверку с проверкой на валидность (вдруг строка из пробелов или одного слова)

Добавлено через 2 часа 3 минуты
Строго прототипу не получается. Просто решается если передать указатель на указатель.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<string>
#include <iostream>
using namespace std;
void mostRecent(char *text,char **word);
 
int main(){
    setlocale(0, "rus");
const int sz=1000;
string inpStr;
char buf[1000];
char* text;
cout<<"Введите строку до "<<sz<<" символов ";
text=   gets(buf);
cout<<"\nВвелено:\t"<<text;
char* word=text;
mostRecent(text, &word);
cout<<"\nЗаднее слово поцака - :\t"<<word<<"\nКю!";
std::cout << std::endl;
std::system("pause");
return 0;    
}
void mostRecent(char *text,char **word){
int textLen=0;
 
while(text[textLen]){
textLen++;
}
if(textLen&&textLen!=1){
for(int i=textLen-1;i>0; i--){
if(text[i]==' '){
*word=&text[i+1];
    break;
}
}
}else{
return;
}
return;
}


Добавлено через 1 час 26 минут
Вот так в соответствии с прототипом. Прав Kuzia domovenok копию и нужно присвоить.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include<string.h>
#include <iostream>
using namespace std;
void mostRecent(char *text,char *word);
int main(){
    setlocale(0, "rus");
const int sz=1000;
string inpStr;
char buf[sz];
char* text;
cout<<"Введите строку до "<<sz<<" символов ";
text=   gets(buf);
cout<<"\nВведено:\t"<<text;
char* word=new char[sz];
mostRecent(text, word);
cout<<"\nПоследнее слово - :\t"<<word;
std::cout << std::endl;
std::system("pause");
return 0;    
}
void mostRecent(char *text,char *word){
int textLen=0;
 
while(text[textLen]){
textLen++;
}
strcpy(word,&text[textLen]);
int ind=0;
if(textLen&&textLen!=1){
for(int i=textLen-2;i>0; i--){
if(i!= textLen-1 && (text[i]==' '&&text[i+1]==' ')) continue;
if(text[i]==' '){
ind=i+1;
    break;
}
}
}else{
if(textLen==1){
cout<<"\nПоследнее слово - :\t"<<word;
std::cout << std::endl;
std::system("pause");
}else{
cout<<"\nПоследнее слово - :\t";
std::cout << std::endl;
std::system("pause");
}
exit(1);
}
strcpy(word,&text[ind]);
return;
}
0
14.11.2012, 20:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2012, 20:33
Помогаю со студенческими работами здесь

В чем разница между указателем и указателем на указатель?
int x, *p, *q; x=10; p=&amp;x; q=p; cout&lt;&lt;*q; int x, *p, **q; x=10; p=&amp;x; q=&amp;p;

Функция с указателем и индексом(Удаляет в строке лидирующие пробелы. Возвращает указатель на преобразованную строку.)
Ребята помогите зачет получить, на парах не был..( Написать следующие функции в двух вариантах:...

Функция с указателем не работает
Всем привет. Вот код. #include &lt;stdio.h&gt; char daytab = { {0, 31, 28, 31, 30, 31,...

Получить определенные поля класса, работая с указателем на класс, как с указателем на массив
Мне бы хотелось узнать в чем ошибка моего кода Вот мои наработки которые не работают где я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru