Программа На Строки В С++

Тема в разделе "Общие вопросы по С и С++", создана пользователем Scerob, 27 дек 2011.

  1. Scerob

    Scerob Гость

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


    #include "stdafx.h"
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    int main ()
    {
    char str[100];
    cout << "vvedite stroku\n";
    cin >> str;
    int sum = 0;
    int cur_el=0;
    for (int i=0 ; i<strlen(str) ; i++)
    if (str == ',')
    cur_el++;
    else
    sum += str;
    cout << "}\nsum = " << sum;
    system("pause");

    }
    Не могу понять как сказать программе чтоб она элементы которые не запятая складывала.
     
  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Вот решение:
    Код (C++):
    #include <string.h>
    #include <iostream>
    #include <math.h>
    using namespace std;
    int main ()
    {
    setlocale(LC_ALL,".1251");
    char s[100],*u;
    cout << "Введите числа через запятую:";
    cin >> s;
    int sum(0),elem(0),len(0);
    u=strtok(s,",\0");
    while(u!=0)
    {
    elem=0;
    len=strlen(u);
    if(u[0]!='-')
    {
    for(int i(0);i<len;i++)
    elem+=(u[i]-48)*pow(10.,len-i-1);
    }
    else
    {
    for(int i(1);i<len;i++)
    elem+=(u[i]-48)*pow(10.,len-i-1);
    elem*=-1;
    }
    sum+=elem;
    u=strtok(NULL,",\0");
    }
    cout<<"Сумма чисел строки="<<sum<<endl;
    }
    Если надо без функций обработки строки(strlen,strtok)
    напиши свои и всавь в программу
     
  3. Scerob

    Scerob Гость

    elem+=(u-48)*pow(10.,len-i-1); не понял эту строчку 48 это что.
     
  4. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    так по порядку

    elem+=что-то; равносильно elem=elem+что-то;
    pow(x,n) возводит x в n-нную степень

    u[j]-1 символ типа char (заведомо цифра) по таблице кодов ASCII(стандарт кодирровки) символам от 0 до 9 соответствуют коды от 48 до 57 соответственно
    т.е.например
    48-48=0
    49-48=1
    50-48=2


    что ещё не понятно?-спрашивай
     
  5. Scerob

    Scerob Гость

    А можно ли эту строчку как то заменить на более понятные, простые функции а то таблица кодов ASCll это я вобще слышу первый раз.
     
  6. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Код (C++):
    int k;
    {
    //в цикле
    k=len-i-1;
    elem=elem+(u[i]-48)*pow(10.,k);
    }
    (u-48)-посмотри функцию atoi

    а вообще проще посмотреть таблицу кодов ASCll :google:
     
  7. Scerob

    Scerob Гость

    А можешь ещё раз пожалуйста объяснить эту строчку сказав что делает каждый элемент по отношению ко всей программе конкретно. А то что-то не доходит зачем всё это. В частности что нам даёт u-48 и возведение 10 в степень len-i-1.
     
  8. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Рассмотрим на примере:
    у тебя в строке число 123
    Код (C++):
    char
    )
    тебе его надо получить его целым числом
    Код (C++):
    int
    всё это делаем для получения суммы
    Код (C++):
    int sum; sum=elem+elem1;
    где elem и elem1 должны быть целыми

    опустим разбиение строки на слова(цифры в данном случае)

    и так у тебя есть 123 НО в char *s
    Код (C++):
    int k,k1,k2;
    k=s[0]-48; //нумерация строки с 0
    k1=s[1]-48;
    k2=s[2]-48;
    т.е. k=1 k1=2 k2=3
    а тебе надо 123
    применем поразрядовое представление числа

    123=1*100+2*10+3*1,заметь 100=10во второй степени 10=10в первой степени 1=10в нулевой степени

    elem=k*10^2+k1*10^1+k2*10^0;
     
  9. Scerob

    Scerob Гость

    Так понял почти всё осталось понять почему -48, скажи плиз u что значит этот элемент и почему -48 ведь по коду 48 это 0
     
  10. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Отнимаешь 48 всегда т.к. символы чисел в кодировке идут последовательно
    код->cимволы
    49->1
    50->2
    51->3
    52->4
    53->5
    54->6
    55->7
    56->8
    57->9
    ..

    1->nul
    2->soh
    3->stx
    4->eot

    код символа еденицы 49, 49-48=1 ты получил код еденицу в целом виде,которая соответствует символу nul
    но ты не переводишь обратно в символы,а работаешь дальше уже со значением
     
Загрузка...

Поделиться этой страницей