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

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

Войти
Регистрация
Восстановить пароль
 
Busterr
-25 / 1 / 0
Регистрация: 25.09.2011
Сообщений: 50
#1

Использование функции - C++

14.10.2011, 20:22. Просмотров 706. Ответов 6
Метки нет (Все метки)

Я должен посчитать сколько букв в каждой строке с использованием функции int countAccurance(char arr[maxn], char ch). Но вывод должен быть в обратном порядке. Вот пример:
Input
2
a abracadabra
b babaluba
Output
3 b in babaluba
5 a in abracadabra
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
#include <iostream>
#include <cstring>
 
using namespace std;
 
int const maxn=200;
 
 int countAccurance(char arr[maxn], char ch);
   int main (){
     int N=0;
     char ch1;
     char str1[maxn];
     cin>>N;
     for(int i=0;i<N;i++)
     {
        cin>>ch1>>str1;
 
        cout<<countAccurance(str1,ch1)<<" "<<ch1<<"in "<<str1<<endl;}
    
    return countAccurance(str1,ch1);
 }
   int countAccurance(char arr[maxn], char ch){
     int res=0;
     int strLength=strlen(arr);
     for(int i=0;i<strLength;i++)
       if(arr[i]==ch)
           res++;
     
   
     return res;
 
   }
Добавлено через 54 минуты
У меня выводит все правильно, но не в обратном порядке
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.10.2011, 20:42     Использование функции #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <stack>
#include <string>
#include <algorithm>
 
int main()
{
    typedef std::pair<char, std::string> data_t;
    std::stack <data_t> str_stack;
 
    for( data_t dat; std::cin >> dat.first >> dat.second && dat.second != "quit"; )
        str_stack.push( dat );
 
    while( str_stack.size() )
    {
        data_t out = str_stack.top();
        std::cout << std::count( out.second.begin(), out.second.end(), out.first ) << ' ' << out.first << "'s in " << out.second << '\n';
        str_stack.pop();
    }
 
    return 0;
}
Добавлено через 5 минут
Извините, поспешил. Не заметил часть про int countAccurance

Добавлено через 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
#include <iostream>
#include <stack>
#include <string>
 
int countAccurate( const char * ptr, char ch )
{
    int count = 0;
 
    while( *ptr )
    {
       if( *ptr == ch )
          count++;
       ptr++;
    }
 
    return count;
}
 
int main()
{
    typedef std::pair<char, std::string> data_t;
    std::stack <data_t> str_stack;
 
    for( data_t dat; std::cin >> dat.first >> dat.second && dat.second != "quit"; )
        str_stack.push( dat );
 
    while( str_stack.size() )
    {
        data_t out = str_stack.top();
        std::cout << countAccurate( out.second.c_str(), out.first ) << ' ' << out.first << "'s in " << out.second << '\n';
        str_stack.pop();
    }
 
    return 0;
}
Busterr
-25 / 1 / 0
Регистрация: 25.09.2011
Сообщений: 50
15.10.2011, 07:36  [ТС]     Использование функции #3
Спасибо конечно, но мне нужен более простой код, так как я еще не проходил Strack и String, a также Typedef.
Евгений М.
1034 / 975 / 53
Регистрация: 28.02.2010
Сообщений: 2,818
Завершенные тесты: 2
15.10.2011, 07:43     Использование функции #4
Цитата Сообщение от Busterr Посмотреть сообщение
У меня выводит все правильно, но не в обратном порядке
Создайте отдельный цикл, в котором будет выводиться результат. Только счетчик этого цикла должен уменьшаться с N-1 до 0.
Busterr
-25 / 1 / 0
Регистрация: 25.09.2011
Сообщений: 50
15.10.2011, 07:57  [ТС]     Использование функции #5
Теперь он два раза выводит тот же результат
Код
#include <iostream>
#include <cstring>
 
using namespace std;
 
int const maxn=200;
 
 int countAccurance(char arr[maxn], char ch);
   int main (){
     int N=0;
     char ch1;
     char str1[maxn];
     cin>>N;
         for(int i=0;i<N;i++){
			 cin>>ch1>>str1;}
 for (int j=N-1;j>=0; j--)
 {cout<<countAccurance(str1,ch1)<<" "<<ch1<<"in "<<str1<<endl;
   }
    return countAccurance(str1,ch1);
 }
   int countAccurance(char arr[maxn], char ch){
     int res=0;
     int strLength=strlen(arr);
     for(int i=0;i<strLength;i++)
       if(arr[i]==ch)
                   res++;
         
   
 return res;
 
   }
Евгений М.
1034 / 975 / 53
Регистрация: 28.02.2010
Сообщений: 2,818
Завершенные тесты: 2
15.10.2011, 08:05     Использование функции #6
Busterr, используйте массивы строк, а не одну строку, который хранит последнюю введенную.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2011, 00:19     Использование функции
Еще ссылки по теме:

C++ Использование функции rectPS
Использование шаблона функции C++
Использование функции xor() C++
C++ Использование функции strtok
Использование функции Gets() C++

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

Или воспользуйтесь поиском по форуму:
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.10.2011, 00:19     Использование функции #7
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
#include <iostream>
 
struct data_t
{
    char ch;
    char str[256];
};
 
int countAccurance( const char * ptr, char ch )
{
    int count = 0;
 
    while( *ptr )
    {
       if( *ptr == ch )
          count++;
       ptr++;
    }
 
    return count;
}
 
int main()
{
    const int max_data = 16;
    data_t data[ max_data ];
    int data_used;
 
    for( data_used = 0; data_used < max_data; data_used++ )
    {
        std::cin >> data[ data_used ].ch;
 
        if( data[ data_used ].ch == 'q' )
           break;
 
        std::cin >> data[ data_used ].str;
    }
 
    std::cout << '\n';
 
 
    for( data_used--; data_used >= 0; data_used-- )
    {
        std::cout << countAccurance( data[ data_used ].str, data[ data_used ].ch )
                  << " '" << data[ data_used ].ch << "' in " << data[ data_used ].str << '\n';
    }
 
    return 0;
}
Yandex
Объявления
16.10.2011, 00:19     Использование функции
Ответ Создать тему
Опции темы

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