Форум программистов, компьютерный форум CyberForum.ru

Найти в строке точку - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
seruy-t
 Аватар для seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
19.03.2012, 18:32     Найти в строке точку #1
Всем привет ! Нужно найти в строке точку. Делаю

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <string>
 
//---------------------------------------------------------------------------
using std::cout;
using std::cin;
using std::endl;
using std::string;
 
int main()
{
 
string input;
cin >> input;
 
short int i,pntr;
 
for(i=0;i<=input.length();i++){
 
                if(input[i] = "." ) pntr =i;
 
 
 
                       }
 
 
 
 
 
        return 0;
}
//---------------------------------------------------------------------------
Ошибка преобразования типов в
C++
1
      if(input[i] = "." ) pntr =i;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
19.03.2012, 18:41     Найти в строке точку #2
Исправляю только это, дальше пробуйте сами - это к лучшему если самому учиться.
Конкретно по поводу ошибок: вы вместо проверки производили присваивание ну и string[i] элемент это ведь символ, а не строка так что и сравнивать его нужно с символом (который берётся в ' '), а не со строкой (что берётся в " ").
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
 
//---------------------------------------------------------------------------
using std::cout;
using std::cin;
using std::endl;
using std::string;
 
int main()
{
    string input;
    cin >> input;
 
    short int i,pntr;
 
    for(i=0;i<=input.length();i++)
    {
        if(input[i] == '.' )
        pntr =i;
    }
    return 0;
}
Добавлено через 2 минуты
Добавлю что точек же может быть несколько, возможно лучше выводить сразу результат что мол точка есть там организовав цикл например так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <string>
 
//---------------------------------------------------------------------------
using std::cout;
using std::cin;
using std::endl;
using std::string;
 
int main()
{
    string input;
    cin >> input;
 
    short int i,pntr;
 
    for(i=0;i<=input.length();i++)
     if(input[i] == '.' )
      {
          pntr =i;
          cout<<pntr<<'\t';
      }
    return 0;
}
А ещё у string есть хорошие функции поиска подстроки ... но о них я думаю вы узнаете чуть позже.
seruy-t
 Аватар для seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
19.03.2012, 18:47  [ТС]     Найти в строке точку #3
Gepar, в данном случаи точка в строке только одна, что упрощает задачу
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
19.03.2012, 18:57     Найти в строке точку #4
seruy-t, ну а вот код используя функцию string если вам интересно
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    int x;
    string input;
    cin >> input;
    if((x=input.find("."))!=string::npos)
     cout<<x;
}
Длина кода значительно уменьшилась
seruy-t
 Аватар для seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
19.03.2012, 19:07  [ТС]     Найти в строке точку #5
C++
1
2
3
4
5
6
7
8
9
int lft=0;
 
   for(i=0;i<pntr;i++){
   lft = lft + atoi(input[i]) ;
     //cout << input[i]<<"\n";
 
                   }
 
cout << lft<<endl;
А здесь что не так ?

Добавлено через 5 минут
Gepar, можно линк на функции работы с строками ?
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
19.03.2012, 19:10     Найти в строке точку #6
Цитата Сообщение от seruy-t Посмотреть сообщение
А здесь что не так ?
Не знаю,может и всё так, код ведь не полный.

Цитата Сообщение от seruy-t Посмотреть сообщение
Gepar, можно линк на функции работы с строками ?
можно.
seruy-t
 Аватар для seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
19.03.2012, 19:14  [ТС]     Найти в строке точку #7
Вот полный код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <string>
#include <stdlib.h>
//---------------------------------------------------------------------------
using namespace std;
int main()
{
    string input;
    cin >> input;
 
    short int i,pntr;
 
    for(i=0;i<=input.length();i++)
    {
        if(input[i] == '.' )
        pntr =i;
    }
    
 
int lft=0;
 
   for(i=0;i<pntr;i++){
   lft = lft + atoi(input[i]) ;
     cout << input[i]<<"\n";
 
                   }
 
cout << lft<<endl;
 
    return 0;
}
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
19.03.2012, 19:20     Найти в строке точку #8
C++
1
atoi(input[i])
с чего такая уверенность что там обязательно цифры?
Hemull
47 / 47 / 1
Регистрация: 12.03.2012
Сообщений: 108
19.03.2012, 19:23     Найти в строке точку #9
seruy-t,
C++
1
lft = lft + atoi("input[i]") ;
ну и для соответствия лучше объявить
C++
1
short unsigned int i,pntr;
seruy-t
 Аватар для seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
19.03.2012, 19:24  [ТС]     Найти в строке точку #10
Расчет на то, что будут введены только цифры и один раз точка. Словом, проверку входных данных я потом реализую
Hemull
47 / 47 / 1
Регистрация: 12.03.2012
Сообщений: 108
19.03.2012, 19:29     Найти в строке точку #11
хотя.чет я не-то написал. там же вывод строки до точки
правильно Gepar сказал, нужна проверка и правильное преобразование
R136a1
 Аватар для R136a1
142 / 111 / 15
Регистрация: 14.04.2011
Сообщений: 261
19.03.2012, 19:38     Найти в строке точку #12
Цитата Сообщение от seruy-t Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
int lft=0;
 
   for(i=0;i<pntr;i++){
   lft = lft + atoi(input[i]) ;
     //cout << input[i]<<"\n";
 
                   }
 
cout << lft<<endl;
А здесь что не так ?
У atoi в аргументе должен быть константный указатель на char, грубо говоря строка. atoi

Добавлено через 8 минут
Цитата Сообщение от seruy-t Посмотреть сообщение
lft = lft + atoi(input[i])
замените на
C++
1
lft += input[i] - '0';
seruy-t
 Аватар для seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
19.03.2012, 20:02  [ТС]     Найти в строке точку #13
Ребята, программа должна сравнить целую и дробную части.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <string>
#include <stdlib.h>
//---------------------------------------------------------------------------
using namespace std;
int main()
{
    string input;
    cin >> input;
 
    short unsigned int i,pntr;
 
    for(i=0;i<=input.length();i++)
    {
        if(input[i] == '.' )
        pntr =i;
    }
 
 
int lft=0;
 
   for(i=0;i<pntr;i++){
   lft += input[i] - '0';
                     }
 
 
 
  int right =0;
 
       for(i=pntr+1;i<input.length();i++){
   right += input[i] - '0';
                     }
 
 
 
 
if(lft=right) cout << "Yes"<<endl;
else cout << "No"<<endl;
 
 
    return 0;
}
Работает, но только для положительный значений. Как быть с отрицательными ?

заменил

C++
1
2
3
 for(i=0;i<pntr;i++){
   lft += input[i] - '0';
                     }
на

C++
1
2
3
4
5
6
7
int lft=0;
 
   for(i=0;i<pntr;i++){
       if(i!='-'){
   lft += input[i] - '0';
       }
                     }
R136a1
 Аватар для R136a1
142 / 111 / 15
Регистрация: 14.04.2011
Сообщений: 261
19.03.2012, 20:22     Найти в строке точку #14
у вас ошибка в 37 строчке
Цитата Сообщение от seruy-t Посмотреть сообщение
if(lft=right) cout << "Yes"<<endl;
Вы не сравниваете, а присваиваете.
Я бы сделал проще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <cstring>
#include <cstdlib>
 
int main()
{
        char num[10];
        int left;
        int right;
 
        std::cin.getline(num,10);
 
        char *numToken = strtok(num,".");
 
        int count = 0;
 
        while(numToken != NULL)
        {
                if(!count)
                        left = atoi(numToken);
                else
                        right = atoi(numToken);
 
                numToken = strtok(NULL,".");
 
                count++;
        }
 
        if(left == right)
                std::cout << "yes" << std::endl;
        else
                std::cout << "no" << std::endl;
 
        return 0;
}
Цитата Сообщение от seruy-t Посмотреть сообщение
Работает, но только для положительный значений. Как быть с отрицательными ?
Это как?
seruy-t
 Аватар для seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
19.03.2012, 20:27  [ТС]     Найти в строке точку #15
R136a1,
Это как?
Когда вводил отрицательное число программа выдавала бред
Я уже это поправил (вроде )
R136a1
 Аватар для R136a1
142 / 111 / 15
Регистрация: 14.04.2011
Сообщений: 261
19.03.2012, 20:33     Найти в строке точку #16
Цитата Сообщение от seruy-t Посмотреть сообщение
R136a1,
Когда вводил отрицательное число программа выдавала бред
Я уже это поправил (вроде )
Ясно Ну если что - моя версия с отрицательными числами корректно работает
seruy-t
 Аватар для seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
19.03.2012, 20:40  [ТС]     Найти в строке точку #17
Нет (((

-11.2
no
R136a1
 Аватар для R136a1
142 / 111 / 15
Регистрация: 14.04.2011
Сообщений: 261
19.03.2012, 20:47     Найти в строке точку #18
Цитата Сообщение от seruy-t Посмотреть сообщение
Нет (((
Тогда я не понял задание
программа должна сравнить целую и дробную части
разве -11 и 2 равны ?
seruy-t
 Аватар для seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
19.03.2012, 20:49  [ТС]     Найти в строке точку #19
Извините, это моя вина, я не полностью написал условие.
Число, которое имеет вид конечного десятичной дроби, называется счастливым, если сумма цифр этого числа до запятой равна сумме цифр после точки. Задан рациональное число, записанное в виде конечного десятичной дроби. Определить, является ли оно счастливым.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2012, 21:00     Найти в строке точку
Еще ссылки по теме:

C++ Найти точку максимума функции
Найти точку на прямой C++
C++ В введенной строке заменить каждую запятую и точку на точку с запятой

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
R136a1
 Аватар для R136a1
142 / 111 / 15
Регистрация: 14.04.2011
Сообщений: 261
19.03.2012, 21:00     Найти в строке точку #20
Цитата Сообщение от seruy-t Посмотреть сообщение
Извините, это моя вина, я не полностью написал условие.
Число, которое имеет вид конечного десятичной дроби, называется счастливым, если сумма цифр этого числа до запятой равна сумме цифр после точки. Задан рациональное число, записанное в виде конечного десятичной дроби. Определить, является ли оно счастливым.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <cstring>
#include <cstdlib>
 
int main()
{
        char num[10];
        int left = 0;
        int right = 0;
 
        std::cin.getline(num,10);
 
        char *numToken = strtok(num,".");
 
        int count = 0;
 
        while(numToken != NULL)
        {
                if(!count)
            while(*numToken)
            {
                            left += *numToken - '0';
                numToken++;
            }
                else
            while(*numToken)
            {
                            right += *numToken - '0';
                numToken++;
            } 
 
                numToken = strtok(NULL,".");
 
                count++;
        }
 
        if(left == right)
                std::cout << "yes" << std::endl;
        else
                std::cout << "no" << std::endl;
 
        return 0;
}
Хотя я все равно не понимаю)
Цитата Сообщение от seruy-t Посмотреть сообщение
-11.2
-1 + 1 == 2 ?)

Добавлено через 1 минуту
Или если исходное число отрицательное, то считать все цифры в это числе отрицательными?
Yandex
Объявления
19.03.2012, 21:00     Найти в строке точку
Ответ Создать тему
Опции темы

Текущее время: 15:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru