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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Сколько точек пересечения имеет прямая у=кх+в с окружностью с центром в точке (0, 0) и радиусом R http://www.cyberforum.ru/cpp-beginners/thread697304.html
задачи в программе CodeBlocks Помогите решить задачу: Сколько точек пересечения имеет прямая у=кх+в с окружностью с центром в точке (0, 0) и радиусом R ? нужен программный код
C++ Среди чисел 1.n найти все такие, запись которых совпадает с последними цифрами записи их квадрата Дано натуральное число n. Среди чисел 1, …, n найти все такие запись которых совпадает с последними цифрами записи их квадрата (например, 6^2=36, 25^2=625). http://www.cyberforum.ru/cpp-beginners/thread697300.html
Проверьте пожалуйста указатели , размерность ответа не влазит что изменить C++
Содержание работы: 1. Разработать Си - программу содержащую 6 переменных одного типа и 2 указателя на любые эти переменные. 2. Вывести на екран: Размер (количество байтов) выделенных под переменные и указатели Значения переменных Значения указателей
Найти числа, которые при делении на 47 дают в остатке 43, а при делении на 43 дают в остатке 47 C++
Мне нужно написать программу в Dev-C++ для поиска трехзначных чисел, которые при делении на 47 дают в остатке 43, а при делении на 43 дают в остатке 47.
C++ Перегрузка операторов и string http://www.cyberforum.ru/cpp-beginners/thread697280.html
есть класс имитирующий стек, все методы проверены и работают правильно! Кроме части касающейся итераторов #include <string> // тип исп. в классе! #include <vector> // там вектор использующийся в классе #include <algorithm> // там нужная классу функция find #include <iostream> //cout cin #include "stack_iter.h"
C++ Цикл с постусловием: поиск элемента с заданными свойствами Известны данные о мощности двигателя 30 моделей легковых автомобилей. Выяснить, есть ли среди них модель, мощность двигателя которой превышает 200 л.с. Помогите буду заранее блогодарен,начал изучать недавно С++ подробнее

Показать сообщение отдельно
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6156 / 2885 / 281
Регистрация: 04.12.2011
Сообщений: 7,680
Записей в блоге: 3
14.11.2012, 20:33     функция с указателем
Цитата Сообщение от 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;
}
 
Текущее время: 08:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru