C ++ // Попытка переписать рабочий код, чтобы включить мою функцию - PullRequest
3 голосов
/ 12 мая 2019

В моем коде должно быть напечатано количество чисел "a" (1

Я написал код, который делает это, используя только функцию main(), но - когда я узнаю о функциях - я пытаюсь переписать этот код, чтобы включить мою собственную функцию. Например, если я ввожу t = 1, n = 35, x = 5 и y = 14, вывод должен быть: «5 10 15 20 25 30».

Код 1 - это код, который отлично работает, только с основной функцией. Код 2 - это код, над которым я сейчас работаю и который должен включать мою функцию "check"

Мне удалось переписать код 2 до точки, где он возвращает символы ASCII, соответствующие числам, которые я должен получить, но у меня возникают проблемы с преобразованием этих символов в числа, отвечающие моим требованиям. При вводе «1 7 2 4» в качестве входных данных код возвращает два символа вместо «2 6».

Любая помощь с исправлением этой проблемы будет очень признателен ...

Код 1:

#include <iostream>

using namespace std;

int main()
{
    int t, n, x, y;
    cin >> t;

    for (int i=0; i<t; i++)
    {
        cin >> n >> x >> y;

        for (int a=0; a<n; a++)
        {
            if ((a%x==0)&&(a%y>0))
                cout << a << " ";
        }
        cout << endl;
    }
    return 0;
}

Код 2:

#include <iostream>

using namespace std;

string check (int n, int x, int y)
{
    string result;
    for (int a=0; a<n; a++)
    {
        if ((a%x==0)&&(a%y>0))
        {
            result += a;
            result += " ";
        }
    }
    return result;
}

int main()
{
    int t, n, x, y;
    cin >> t;

    for (int i=0; i<t; i++)
    {
        cin >> n >> x >> y;
        cout << check (n, x, y) << endl;
    }
    return 0;
}

1 Ответ

3 голосов
/ 12 мая 2019

В чем проблема?

Это потому, что компилятор понимает следующее утверждение так, как если бы вы хотели добавить один символ в строку (таким образом, символ, соответствующий коду ascii для a, есликодировка строки ascii):

result += a; 

Вы можете проверить это поведение operator+=, попробовав:

result += 64;   // ascii code for @

Как решить эту проблему?

Чтобы получить ожидаемый результат, вам нужно явно преобразовать a в строку.Поэтому измените строку на:

result += to_string(a);

Разве нет более простого способа?

В качестве альтернативы, если у вас много форматирования, и если вам удобно с потоками, вы можетехочу рассмотреть stringstream:

string check (int n, int x, int y)
{
    stringstream result;
    for (int a=0; a<n; a++)
    {
        if ((a%x==0)&&(a%y>0))
        {
            result << a << " ";
        }
    }
    return result.str();
}

Строковые потоки ведут себя как обычные потоки (например, cout), за исключением того, что записывают результат в память.Затем вы можете легко преобразовать конечный результат, используя функцию-член str().

...