Сбор самых больших и самых маленьких чисел в C-String C ++ - PullRequest
0 голосов
/ 22 марта 2019

Моя цель для домашнего проекта состояла в том, чтобы создать программу, которая принимает в качестве строки последовательность целых чисел без пробелов между ними. Затем добавить его и отобразить самые низкие и самые большие значения в строке. Я получил свою сумму и самое большое значение для работы, но по какой-то причине часть моей программы, которая предполагает получение наименьшего значения, не работает, и когда я пытаюсь найти значение, я ничего не получаю.

Например, я ввожу 1234, я получаю

"Сумма всех чисел в строке, которую вы вводите, равна 10 Наибольшее значение в этой серии целых чисел равно 4, а наименьшее значение равно ",

Вот моя полная программа. Любая помощь приветствуется (:

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

int main()
{
//Declaring Variables & Character Array:
int size = 100;
char integers[size];

//Small and Large Numbers:
char small = '9';
char large = '0';

//Gathering Integers:
cout << "Please enter a series of integers with nothing between them.";
cin >> integers;

//Gathering Size of String:
size = (strlen(integers) + 1);

//Initializing Sum Variable:
int sum = 0;

//Gathering Sum of All Integers in String:
for(int i = 0; i < size; i++)
{
    if(integers[i] >= '0' && integers[i] <= '9' && integers[i] != '\0')
    {
        if(integers[i] == '0')
            sum += 0;
        if(integers[i] == '1')
            sum += 1;
        if(integers[i] == '2')
            sum += 2;
        if(integers[i] == '3')
            sum += 3;
        if(integers[i] == '4')
            sum += 4;
        if(integers[i] == '5')
            sum += 5;
        if(integers[i] == '6')
            sum += 6;
        if(integers[i] == '7')
            sum += 7;
        if(integers[i] == '8')
            sum += 8;
        if(integers[i] == '9')
            sum += 9;
    }
}

//Gathering Largest Value:
for(int j = 0; j < size; j++)
{
    if(integers[j] > large)
        large = integers[j];
}

//Gathering Smallest Number
for(int j = 0; j < size; j++)
{
    if(integers[j] < small)
        small = integers[j];
}

//Outputting Values:
cout << "The sum of all numbers within the string you input is " << sum << endl;
cout << "The largest value in this series of integers is " << large << ", whilst the smallest value is " << small << endl;


return 0;
}

Ответы [ 2 ]

3 голосов
/ 22 марта 2019

Окончательный результат small равен \0, поскольку вы отсканировали нулевой символ, и его значение наименьшее.

См. Это: https://ideone.com/6sLWJV

И,как предложение.Если вы гарантируете, что ваш ввод не превысит размер массива, остановите итерацию, определив, является ли текущий символ \0, а не рассчитав время итерации, и сравните его с размером массива.

3 голосов
/ 22 марта 2019

Ошибка здесь

//Gathering Size of String:
size = (strlen(integers) + 1);

Это неверно, должно быть

size = strlen(integers);

Поскольку у вас неверный размер, вы обрабатываете нулевой символ в конце строки, и это портит ваш самый маленький расчет (потому что нулевой символ - самый маленький символ).

...