Разработать программу, выполняющую обработку строки. Обработка строки должна осуществляться посимвольно (использование функций форматированного вывода 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 программа уинкрементирует индекс до тех пор пока индекс не будет указывать на символ запятой. Многократно повторяя выше описанные операции, в итоге мы получаем сумму чисел в строке. Результат ниже:

Комментарии
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; }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; }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; }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; }RodjeR