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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Satansoft
8 / 8 / 1
Регистрация: 27.02.2012
Сообщений: 724
#1

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

06.03.2013, 23:13. Просмотров 453. Ответов 10
Метки нет (Все метки)

Задача: Написать прог. с ф-ей, что сравнивает две строки, заданных в качестве её аргументов (знач. 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-й части задания)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2013, 23:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с аргументами ф-й в С++ (C++):

Работа с аргументами - C++
Задание такое: Написать программу с использованием функции, которая сравнивает две строки, заданные в качестве её аргументов. Если аргумент...

Работа с аргументами консоли - C++
Привет. Подскажите на простом примере если я в консоли хочу например ввести команду &quot;print 3&quot;. И чтобы после этого в консоли вывелось &quot;3&quot;....

Работа с аргументами командной строки - C++
ПОдскажите, как через аргументы командной строки вывести {1 2 3 4 5} в файл по блочно из массива?

Запуск приложения с параметрами. Работа с аргументами - C++
Приветствую всех, у меня вопрос по созданию консольного приложения на вход которому передаются след. аргументы в argv год YYYY. В...

Макросы с аргументами - C++
Напишите программу, содержащую макросы с аргументами, вычисляющие площади различных геометрических фигур (например, квадрата,...

Функция с аргументами - C++
Написать функцию с аргументами вещественный массив x размер массива n. Функция возвращает значение суммы элементов массива, начиная с...

10
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,127
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;
}
1
Satansoft
8 / 8 / 1
Регистрация: 27.02.2012
Сообщений: 724
06.03.2013, 23:28  [ТС] #3
Какой халявный синтаксис :3, но зачем "аааааа"? ведь строки две, а параметры второй заданы по "умолчанию"? И второй вывод в мейне ориентирован на наличие лишь одного аргумента в ф-ии? Вторая же часть задания просит найти длину строки, заданной в качестве аргумента и только если аргумент один.
0
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,127
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;
}
1
Satansoft
8 / 8 / 1
Регистрация: 27.02.2012
Сообщений: 724
06.03.2013, 23:59  [ТС] #5
Но почему именно такой вывод?
C++
1
2
cout<<strr("garrr","aaaa")<<endl;
cout<<strr("aaaa");
"аааа" в первом выводе игнорирует параметр "по умолчанию" "hello" и сравнивается с garrr
"аааа" во втором выводе сравнивается с "hello", хотя по второму условию, к аргументу str2 обращение не нужно...
0
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,127
07.03.2013, 00:09 #6
Я чего запутался в условии. Я понял так
Если в функцию передаются оба параметра мы сравниваем их длину и выводим большую строку,
если передан один параметр, то мы возвращаем его размер.
Если я неправильно понял поправте меня.

Но почему именно такой вывод?
Да просто так, что бы было видно что условие
C++
1
 if(str2!="hello")
срабатывает правильно, выведете что необходимо вам.
0
Satansoft
8 / 8 / 1
Регистрация: 27.02.2012
Сообщений: 724
07.03.2013, 00:17  [ТС] #7
Верно поняли, но 2-й параметр задан по "умолчанию", так что в любом случае передаем мы один параметр. А ф-я to_string у меня в среде работать не желает, пишет, что не декларирована, хотя вроде в string находится...
0
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,127
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;
}
1
Satansoft
8 / 8 / 1
Регистрация: 27.02.2012
Сообщений: 724
07.03.2013, 00:41  [ТС] #9
Оригинал задания из методички.
Написать программу с использованием функции, которая сравнивает две
строки, заданные в качестве ее аргументов. Если аргумент только один,
то найти длину этой строки.
В данной лабораторной ещё упоминается про эллипсисы и библиотеку <stdargs.h>, но нету внятного примера применения...

Видимо придется на одно задание писать две отдельные программы с одним и двумя аргументами?
0
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,127
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>
сказать ни чего не могу, ни когда не использовал.
1
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 443
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
Нужно задавать пустую строку для значения по умолчанию, тогда правильно будет вычисляться.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2013, 01:52
Привет! Вот еще темы с ответами:

Функция main с аргументами - C++
Приветствую, подскажите где именно указывать параметры аргументов(int argc, char **argv), если использовать следующий тип записи int...

Рекурсивная функция a^b с 2-я аргументами - C++
Собственно возможно ли это сделать? Я не смог придумать с 2-я аргументами, только с 3-я #include &lt;iostream&gt; #include &lt;cstdlib&gt; ...

Вызов конструктора с аргументами - C++
есть класс приложения test_proj в интерфейсе класса в файле test_proj.h создается объект класса Settings. class test_proj { ...

Непонятки с аргументами функции - C++
Класс:class MyStruct { public: struct Element { Element * next; Element * prev; string BookOrMagazine; string...


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
07.03.2013, 01:52
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru