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

Работа с аргументами ф-й в С++ - C++

Восстановить пароль Регистрация
 
Satansoft
 Аватар для Satansoft
7 / 7 / 1
Регистрация: 27.02.2012
Сообщений: 698
06.03.2013, 23:13     Работа с аргументами ф-й в С++ #1
Задача: Написать прог. с ф-ей, что сравнивает две строки, заданных в качестве её аргументов (знач. 2-го рядка задать "по умолчанию"), если в ф-и задан только один аргумент, вывести его длину, вызов ф-й производить из main'a

Программа с ошибками:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string.h>
 
using namespace std;
 
char strr(char str1[20], char str2[20]="zend")
{
    return strlen(str1)>strlen(str2)? str1:str2;
}
int main ()
{
    cout<<strr("garrr")<<endl;
}
Вопросы:
1)Проблемы в преобразовании типа string в char, как это выполнить, оперируя с аргументами?
2)Как ф-я определяет количество аргументов? (для выполнения 2-й части задания)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
06.03.2013, 23:26     Работа с аргументами ф-й в С++ #2
1)Проблемы в преобразовании типа string в char, как это выполнить, оперируя с аргументами?
Используйте
C++
1
string str;
или
C++
1
char * str;
Как ф-я определяет количество аргументов? (для выполнения 2-й части задания)
В зависимости от количества переданных аргументов
C++
1
2
 cout<<strr("garrr","aaaa")<<endl;
    cout<<strr("aaaa");
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
 
 
using namespace std;
 
string strr(string str1, string str2="hello")
{
    return str1.size()>str2.size()? str1:str2;
}
int main ()
{
 
    cout<<strr("garrr","aaaa")<<endl;
    cout<<strr("aaaa");
 
return 0;
}
Satansoft
 Аватар для Satansoft
7 / 7 / 1
Регистрация: 27.02.2012
Сообщений: 698
06.03.2013, 23:28  [ТС]     Работа с аргументами ф-й в С++ #3
Какой халявный синтаксис :3, но зачем "аааааа"? ведь строки две, а параметры второй заданы по "умолчанию"? И второй вывод в мейне ориентирован на наличие лишь одного аргумента в ф-ии? Вторая же часть задания просит найти длину строки, заданной в качестве аргумента и только если аргумент один.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
06.03.2013, 23:44     Работа с аргументами ф-й в С++ #4
Если честно никогда не задумывался. Стандартного способа не знаю.
Могу лишь предложить, если параметр по умолчанию значит он заранее известен, значит
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
 
 
using namespace std;
 
string strr(string str1, string str2="hello")
{
    if(str2!="hello")
    return str1.size()>str2.size()? str1:str2;
    else
    return to_string(str1.size());
}
int main ()
{
 
    cout<<strr("garrr","aaaa")<<endl;
    cout<<strr("aaaa");
 
return 0;
}
Satansoft
 Аватар для Satansoft
7 / 7 / 1
Регистрация: 27.02.2012
Сообщений: 698
06.03.2013, 23:59  [ТС]     Работа с аргументами ф-й в С++ #5
Но почему именно такой вывод?
C++
1
2
cout<<strr("garrr","aaaa")<<endl;
cout<<strr("aaaa");
"аааа" в первом выводе игнорирует параметр "по умолчанию" "hello" и сравнивается с garrr
"аааа" во втором выводе сравнивается с "hello", хотя по второму условию, к аргументу str2 обращение не нужно...
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
07.03.2013, 00:09     Работа с аргументами ф-й в С++ #6
Я чего запутался в условии. Я понял так
Если в функцию передаются оба параметра мы сравниваем их длину и выводим большую строку,
если передан один параметр, то мы возвращаем его размер.
Если я неправильно понял поправте меня.

Но почему именно такой вывод?
Да просто так, что бы было видно что условие
C++
1
 if(str2!="hello")
срабатывает правильно, выведете что необходимо вам.
Satansoft
 Аватар для Satansoft
7 / 7 / 1
Регистрация: 27.02.2012
Сообщений: 698
07.03.2013, 00:17  [ТС]     Работа с аргументами ф-й в С++ #7
Верно поняли, но 2-й параметр задан по "умолчанию", так что в любом случае передаем мы один параметр. А ф-я to_string у меня в среде работать не желает, пишет, что не декларирована, хотя вроде в string находится...
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
07.03.2013, 00:33     Работа с аргументами ф-й в С++ #8
А ф-я to_string у меня в среде работать не желает
Требование у неё стандарт С++11 и находится в пространстве имен std
Пример вызова
C++
1
std::to_string();
П.С. Если честно у меня она тоже не работает т.к. компилятор не полностью(или полностью) не поддерживает этот стандарт.
так что в любом случае передаем мы один параметр
Тогда мне непонятно задание,
если в ф-и задан только один аргумент, вывести его длину,
тогда нет смысла в условии
C++
1
if(str2!="hello")
а сразу выводить
C++
1
return to_string(str1.size());
и раз так то исправте

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
 
using namespace std;
 
int strr(string str1, string str2="hello")
{
    //if(str2!="hello")
    //return str1.size()>str2.size()? str1:str2;
    //else
    return str1.size();
}
int main ()
{
 
   // cout<<strr("garrr","aaaa")<<endl;
    cout<<strr("aaaa");
 
return 0;
}
Satansoft
 Аватар для Satansoft
7 / 7 / 1
Регистрация: 27.02.2012
Сообщений: 698
07.03.2013, 00:41  [ТС]     Работа с аргументами ф-й в С++ #9
Оригинал задания из методички.
Написать программу с использованием функции, которая сравнивает две
строки, заданные в качестве ее аргументов. Если аргумент только один,
то найти длину этой строки.
В данной лабораторной ещё упоминается про эллипсисы и библиотеку <stdargs.h>, но нету внятного примера применения...

Видимо придется на одно задание писать две отдельные программы с одним и двумя аргументами?
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
07.03.2013, 00:48     Работа с аргументами ф-й в С++ #10
Как я понял, сделал бы так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
 
using namespace std;
 
int strr(string str1, string str2="hello")
{
    if(str2!="hello")
    return str1.size()>str2.size()? str1.size():str2.size();
    else
    return str1.size();
}
int main ()
{
 
    cout<<"Выводим длину большой из строк -"<<strr("строка1","тест")<<endl;
    cout<<"Выводим длину строки"<<strr("строка1");
 
return 0;
}
По поводу
<stdargs.h>
сказать ни чего не могу, ни когда не использовал.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2013, 01:52     Работа с аргументами ф-й в С++
Еще ссылки по теме:

C++ Работа с аргументами
C++ Непонятки с аргументами функции
C++ Макросы с аргументами

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

Или воспользуйтесь поиском по форуму:
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 439
07.03.2013, 01:52     Работа с аргументами ф-й в С++ #11
Цитата Сообщение от Satansoft Посмотреть сообщение
В данной лабораторной ещё упоминается про эллипсисы и библиотеку <stdargs.h>, но нету внятного примера применения...
Судя по заданию здесь не получится применить stdarg, т.к.
There is no mechanism defined for determining the number or types of the unnamed arguments passed to the function. The function is simply required to know or determine this somehow, the means of which vary.
Т.е. имея функцию вроде:
C++
1
int calc(const char* str, ...)
невозможно узнать передавались ли еще какие-то параметры.

Цитата Сообщение от egor2116 Посмотреть сообщение
cout<<"Выводим длину большой из строк -"<<strr("строка1","hello")<<endl; // OOOPS
Нужно задавать пустую строку для значения по умолчанию, тогда правильно будет вычисляться.
Yandex
Объявления
07.03.2013, 01:52     Работа с аргументами ф-й в С++
Ответ Создать тему
Опции темы

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