Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
LILIE
Сообщений: n/a
14.11.2012, 12:55     функция с указателем #1
насколько я поняла, то нужно с помощью функции(при этом используя указатели) написать код, который заменяет строчные буквы на заглавные
перевод задания особо не поняла, если что, то вот:

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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
denys_l
51 / 51 / 4
Регистрация: 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
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,714
Записей в блоге: 3
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);
Pavell
14 / 14 / 0
Регистрация: 13.11.2012
Сообщений: 28
14.11.2012, 13:11     функция с указателем #4
совсем не правильно поняла, тут написано, что программа должна быть нечувствительна к регистру, т.е. слова Can и CAN для нее должны считаться одинаковыми словами. А вообще она должна возвращать слово из всего текста
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
14.11.2012, 13:41     функция с указателем #5
Цитата Сообщение от denys_l Посмотреть сообщение
Не могу понять, что подразумевают под most recent
Цитата Сообщение от Pavell Посмотреть сообщение
А вообще она должна возвращать слово из всего текста
Цитата Сообщение от IGPIGP Посмотреть сообщение
возвращающую наиболее часто встреченное в ней слово
Где вы английский учили? Функция должна возвращать указатель на позицию последнего слова в тексте.
denys_l
51 / 51 / 4
Регистрация: 26.09.2011
Сообщений: 186
14.11.2012, 13:47     функция с указателем #6
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Где вы английский учили? Функция должна возвращать указатель на позицию последнего слова в тексте.
Исхогдя из контекста было бы уместней написать the last word...
Pavell
14 / 14 / 0
Регистрация: 13.11.2012
Сообщений: 28
14.11.2012, 15:21     функция с указателем #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Где вы английский учили?
он у меня родной
подумаешь "последнее" пропустил, ну и да не само слово возвращать, а указатель на него (тут виноват)
denys_l
14.11.2012, 15:25
  #8

Не по теме:

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

IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,714
Записей в блоге: 3
14.11.2012, 16:21     функция с указателем #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Где вы английский учили? Функция должна возвращать указатель на позицию последнего слова в тексте.
Верно, resent, действительно последний. Спасибо. Что касается типа возврата, то делается же он в процедурном С-стиле. То есть строго говоря функция не имеет типа возврата или др. сл., имеет тип void. Второй параметр - указатель на чар и ему присваивается результат, так что с этим всё верно.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
14.11.2012, 16:27     функция с указателем #10
Цитата Сообщение от IGPIGP Посмотреть сообщение
Верно, resent, действительно последний. Спасибо. Что касается типа возврата, то делается же он в процедурном С-стиле. То есть строго говоря функция не имеет типа возврата или имеет тип void. Второй параметр - указатель на чар и ему присваивается результат, так что с этим всё верно.
Я тут задумался и понял, что был не прав насчёт "указатель на позицию последнего слова в тексте". Если мы в функции мы найдём, что посл.слово начинается с 7го символа, то согласно моему ответу должны будем сделать word=text+7; и выйти из функции. Но это не верно, т.к. значение переданного аргумента не изменится после выхода из функции. Нужно именно что возвращать копию последнего слова в тексте делать strncpy(word, text+7, n); и выйти из функции.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2012, 20:33     функция с указателем
Еще ссылки по теме:

В чем разница между указателем и указателем на указатель? C++
Непоняток с указателем C++
C++ Функция с указателем на void** не получается вернуть данные?

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,714
Записей в блоге: 3
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;
}
Yandex
Объявления
14.11.2012, 20:33     функция с указателем
Ответ Создать тему
Опции темы

Текущее время: 21:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru