Сумма целых чисел в строке

Уровень сложности:

Разработать программу, выполняющую обработку строки. Обработка строки должна осуществляться посимвольно (использование функций форматированного вывода  scanf() и sscanf() не допускается). Найти сумму целых чисел, перечисленных в исходной строке через запятую. Ввод исходной строки осуществляется с клавиатуры.

Пример: 15,-2,1,0
Результат: 14

Вспоминаем как работать со строками в С++. Как-то нужно преобразовать строку к типу данных int, за вас это сделает функция atoi. Результат работы программы показан ниже:

// sum_integer_string.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
    char string[100]; // строка целых чисел 
    setlocale(LC_ALL, "rus");
    cout << "Введите строку чисел(числа отделяются друг от друга запятой): ";
    cin >> string;

    int index = 0; // индекс символа в строке
    int sum = 0;

    while (string[index] != '\0') //  пока не конец строки
    {
        if (string[index] != ',') // если текущий символ не запятая
        {
            sum += atoi((string + index)); // суммируем число
            while (string[index] != ',') 
            index++; // увеличиваем индекс до тех пор пока не встретим запятую
        }
        else // текущий символ запятая
            index++; // инкремент индекса       
    }

    cout << "Сумма чисел = " << sum << endl;
    system("pause");
    return 0;
}

Обратите внимание на строку 21, функция atoi() преобразует строку в целое число. У данной функции всего один параметр — указатель на строку. То есть в качестве аргумента функции atoi() программа передаёт указатель на позицию в строке, в которой содержится цифра. И в случае, если между запятыми стоит несколько цифр, двух, трёх, четырёхразрядное число, функция atoi() захватит все разряды числа. После того как очередное число было изъято из строки с помощью оператора цикла while программа уинкрементирует индекс до тех пор пока индекс не будет указывать на символ запятой. Многократно повторяя выше описанные операции, в итоге мы получаем сумму чисел в строке. Результат ниже:


Сумма целых чисел, перечисленных в строке через запятую

Следующие статьи помогут вам в решении данной задачи:
Автор: admin
Дата: 12.09.2012
Поделиться:

Комментарии

  1. YourSpace_tym

    // ConsoleApplication9.cpp : Defines the entry point for the console application.
    // created by YourSpace_tym
    
    #include "stdafx.h"
    #include "iostream"
    #include "string"
    
    using namespace std;
    
    int main()
    {
    	char * something = new char[100];
    	cout << "String : ";
    	int sum = 0;
    	int index = 0;
    	cin.getline(something, 100);
    	for (int i = 0; i < strlen(something); i++) {
    		if (something[i] != ',' && (i == 0 || something[i-1] == ',')) {
    			sum += atoi(something + index);
    		} else if (something[i] == ',') index = i + 1;
    	}
    	cout << "Sum : " << sum << endl;
    	return 0;
    }
  2. YourSpace_tym

     

    // ConsoleApplication9.cpp : Defines the entry point for the console application.
    // created by YourSpace_tym
    
    #include "stdafx.h"
    #include "iostream"
    #include "string"
    #include "fstream"
    
    using namespace std;
    
    int main()
    {
    	char * something = new char[100];
    	char * number = new char[50];
    	cout << "String : ";
    	int sum = 0;
    	int p = 1;
    	int index = 0;
    	cin.getline(something, 100);
    	for (int i = 0; i < strlen(something); i++) {
    		if (something[i] != ',' && (i == 0 || something[i-1] == ',')) {
    			sum += atoi(something + index);
    		}
    		if (something[i] == ',') index=i+1;
    	}
    	cout << "Sum : " << sum << endl;
    	return 0;
    }
  3. RodjeR

    #include <iostream>
    #include <conio.h>
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    	setlocale(LC_ALL, "rus");
    	
    	char str[200]; 
    	cout << "Введите строку: "; cin >> str;
    
    	int sum = 0,
    		index = 0; 
    	
    	for (int i = 0; i < strlen(str); i++)
    	{
    		sum += atoi(str + index);
    		index++;
    	}
    
    	cout << sum;
    	_getch();
    	return 0;
    }
  4. PeZBarboZ

    //
    #include <iostream>
    #include <cstdio>
    using namespace std;
    int main()
    {
    
    	setlocale(LC_ALL, "RUS");
    	cout << "Введите строку чисел через запятую : ";
    	char tmp[256];
    	int sum = 0;
    	cin >> tmp;
    	int len = strlen(tmp);
    	
    	for (int i = 0; i < len; i++)
    	{
    		sum +=(atoi(tmp + i));
    		//cout << sum << endl;//Проверка для себя. :)
    	}
    	cout << "Sum = "<<sum << endl;
    
    	return 0;
    }

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.