Ссылка не изменяет значение переменной - PullRequest
1 голос
/ 24 апреля 2020

Я написал эту программу, чтобы найти первое вхождение символа в заданную пользователем строку и частоту этого символа. Но когда я печатаю значение переменной i_r внутри основной функции, она печатает ноль. Но в сторону find_ch показывает правильное значение.

Почему это происходит?

#include<iostream>
#include<string>
using namespace std;
string::size_type find_ch(string &str,char ch,int &i_r)
{
    string::size_type first=0;
    for(auto i=static_cast<int>(str.size())-1;i>0;i--)
    {
        cout<<"Value of i_r : "<<i_r<<endl;
        if(str[i]==ch)
        {
            first=i+1;
            i_r++;
        }
    }
    return first;
}
bool check_char(string &str,char ch)
{
    for(auto i=str.begin();i!=str.end();i++)
        if(*i==ch)
            return 1;
    return 0;
}
int main()
{
    string str,&rstr=str;
    char ch=' ';
    int freq=0,&i_r=freq;
    cout<<"Enter a string : ";
    getline(cin,str);
    cout<<"Enter a character you want to find first occurrence index and count : ";
    cin>>ch;
    if(check_char(rstr,ch))
        cout<<"First occurrence of character "<<ch<<" is "<<find_ch(rstr,ch,i_r)<<" and frequency of character is "<<i_r;
    else
        cout<<"Character does not exist in the string.";
    return 0;
}

1 Ответ

0 голосов
/ 24 апреля 2020

Здесь ваша проблема решена. Просто выполните функцию перед оператором cout. Происходит то, что при печати он следует порядку справа налево для исполнения. Вы можете испытать это в C, также используя функцию printf. Мне было очень весело с этим, я использовал операторы ++ или - для чисел и печатал их. Это как бы сбивает с толку тот порядок, в котором они увеличиваются и уменьшаются.

#include<iostream>
#include<string>
using namespace std;

string::size_type find_ch(string &str,char ch,int &i_r)
{
string::size_type first=0;
for(auto i=static_cast<int>(str.size())-1;i>0;i--)
{
    cout<<"Value of i_r : "<<i_r<<endl;
    if(str[i]==ch)
    {
        first=i+1;
        i_r++;
    }
}
return first;
}
bool check_char(string &str,char ch)
{
for(auto i=str.begin();i!=str.end();i++)
    if(*i==ch)
        return 1;
return 0;
}
int main()
{
string str,&rstr=str;
char ch=' ';
int freq=0,&i_r=freq;
cout<<"Enter a string : ";
getline(cin,str);
cout<<"Enter a character you want to find first occurrence index and count : ";
cin>>ch;
if(check_char(rstr,ch))
{
    auto a = find_ch(rstr,ch,i_r);
    cout<<"First occurrence of character "<<ch<<" is "<<a<<" and 
    frequency of character is "<<i_r;
}
else
    cout<<"Character does not exist in the string.";
return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...