Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 31
1

Строка произвольного размера

23.11.2018, 16:47. Показов 2908. Ответов 17

Author24 — интернет-сервис помощи студентам
Можно ли как-то сделать, чтобы изначально не задавать длину массива (строки)?
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
#include <iostream>
#include <conio.h>
#include <stdio.h>
using namespace std;
int main()
{
    setlocale(LC_ALL,"russian");
    char a[100];  //вот здесь
    int kt=0;
    cout<<"Введите строку:"<<endl;
    gets(a);
    if (a[0]!='-') 
    {
        cout<<"Введенная строка не является отрицательным дробным числом."<<endl;
        return 0;
    }
    for (int i=0;a[i]!='\0';i++)
    {
        if (a[i]<=48 && a[i]>=57) 
        {
            cout<<"Введенная строка не является отрицательным дробным числом."<<endl;
            break;
        }
        if (a[i]=='.') kt++;
    }
    if (kt==1) cout<<"Введенная строка является отрицательным дробным числом."<<endl;
    if (kt!=1) cout<<"Введенная строка не является отрицательным дробным числом."<<endl;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2018, 16:47
Ответы с готовыми решениями:

Матрицы произвольного размера.
Помогите пожалуйста написать программу, которая будет работать с матрицами произвольного размера....

Объект произвольного размера через new
Хочу создать объект в динамической памяти так, чтобы 1) был вызван конструктор объекта, 2) размер...

Динамический массив произвольного размера
динамический массив заданного размера: int *massiv = new int а как организовать произвольного...

Квадратная матрица произвольного размера
Не понимаю массивы, помогите пожалуйста написать программу формирующую произвольного размера...

17
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
23.11.2018, 17:13 2
Лучший ответ Сообщение было отмечено sheva_7 как решение

Решение

sheva_7, лучше использовать string
1
83 / 20 / 0
Регистрация: 30.10.2018
Сообщений: 106
23.11.2018, 17:59 3
просто не указывай размер, оставь скобки пустыми
0
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
23.11.2018, 18:06 4
sheva_7, смотрите в сторону динамического выделения памяти, ну или почитайте о VLA, если ваш компилятор его поддерживает.
Цитата Сообщение от kusancho Посмотреть сообщение
просто не указывай размер, оставь скобки пустыми
это так не сработает
0
83 / 20 / 0
Регистрация: 30.10.2018
Сообщений: 106
23.11.2018, 18:09 5
тогда через динамический массив
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.11.2018, 20:26 6
sheva_7, не знаю что Вы делаете, так как не сообщили условие задачи, но такое условие:
Цитата Сообщение от sheva_7 Посмотреть сообщение
if (a[i]<=48 && a[i]>=57)
никогда не выполнится
0
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 31
23.11.2018, 20:32  [ТС] 7
Задача: написать программу, которая проверяет, является ли введенная с клавиатуры строка дробным отрицательным числом. Это условие благополучно выполняется. Оно проверяет, является ли символ цифрой от 0 до 9 в соответствии с кодировкой ASCII
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.11.2018, 21:22 8
Цитата Сообщение от sheva_7 Посмотреть сообщение
Это условие благополучно выполняется.
неужели Вы не видите, что написан бред ? значение одновременно должно быть меньше или равно 48 и больше или равно 57
1
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 31
23.11.2018, 21:30  [ТС] 9
Yetty, да, извиняюсь, я даже как-то не заметила... по идее там ИЛИ должно было стоять)) на удивление, при многочисленных проверках все работало даже при этом косяке. Спасибо, что указали на ошибку!
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.11.2018, 21:34 10
sheva_7, так и это ещё не всё почему неравенста нестрогие ?
0
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 31
23.11.2018, 21:36  [ТС] 11
Yetty, это уже было исправлено буквально 5 минут назад))
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.11.2018, 21:43 12
Цитата Сообщение от sheva_7 Посмотреть сообщение
это уже было исправлено буквально 5 минут назад))
оперативно как у Вас а точка может быть первым или последним символом ? и вообще не брекнется из цикла, как только точка найдётся ?
0
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 31
23.11.2018, 21:52  [ТС] 13
Yetty, первым точно нет, так как первым должен стоять минус. Последним по-хорошему тоже. Если ввести, например, -123. выводит, что не является, но почему-то два раза
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.11.2018, 21:57 14
sheva_7, согласен, имелось ввиду первым после минуса. два раза потому что ненужные выводы. Вы как считаете такие записи -.345 или -345. являются дробными отрицательными ? - уточняю, чтобы подсказать в решении
0
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 31
23.11.2018, 22:06  [ТС] 15
Yetty, если сразу после минуса поставить, то тоже два раза выводит, что не является. Я считаю, что -.345 и -345. не являются таковыми

Добавлено через 5 минут
Yetty, исправила, теперь вроде как все ок. Еще раз спасибо за Ваши замечания!
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.11.2018, 23:48 16
Цитата Сообщение от sheva_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
32
33
34
#include <iostream> 
using namespace std;
 
int main()
{
    int i=0, k=0, point=0;
    string s;
    cout << "String:\n";
    getline(cin, s);       
    
    if ( s[0]!='-' || s[1]=='.' || s[s.size()-1]=='.' ) k++;   
    else 
       while (s[i])  
       {  
       if (s[i]=='.') point++; 
       if (point==2) {k++;break;}
       i++;
       }
       
       if (point==0) k++;
    
    i=1;   
    if (point==1)
       while (s[i])  
       {            
       if (s[i]!='.'&&(s[i]<'0' || s[i]>'9')) {k++;break;}
       i++;
       }
    
    if (k==0) cout <<"YES\n";
    else cout <<"NO\n";
system("pause");
return 0;
}
а числа с первыми нулями, например -09.23 нужно исключать ?
0
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 31
24.11.2018, 11:33  [ТС] 17
Yetty,
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
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <string.h>
using namespace std;
int main()
{
    setlocale(LC_ALL,"russian");
    string a;
    cout<<"Введите строку:"<<endl;
    getline(cin,a);
    int kt=0;
    int len=a.size();
    if (a[0]!='-') 
    {
        cout<<"Введенная строка не является отрицательным дробным числом.";
        return 0;
    }
    else
    {
        for (int i=1;a[i]!='\0';i++)
        {
            if ((a[i]<48 || a[i]>57) && a[i]!='.') 
            {
                cout<<"Введенная строка не является отрицательным дробным числом."<<endl;
                return 0;
            }
            if (a[i]=='.' && i!=1 && i!=len-1) kt++;
        }
        if (kt==1) cout<<"Введенная строка является отрицательным дробным числом."<<endl;
        else cout<<"Введенная строка не является отрицательным дробным числом."<<endl;
    }
}
насчет первого нуля хз, можно как некорректный ввод обозначать
и если ноль последний
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
24.11.2018, 11:57 18
sheva_7,
Цитата Сообщение от sheva_7 Посмотреть сообщение
#include <stdio.h>
#include <conio.h>
#include <string.h>
это С, а не C++
Вашу программу посмотрел, работает, только как и мой вариант засчитывает числа вида -0000.7 Замечания такие: строка может быть очень длинной и нет смысла проверять все значения, если например уже третий символ '*' - если подобный символ найден, лучше сразу прекратить работу и выйти из цикла по break и тройной вывод одинакового предложения - тоже как-то не очень. 48 и 57 нагляднее заменить на 0 и 9. Можете посмотреть, как в моём варианте это реализовано. Если есть вопросы, задавайте. Но это так, взгляд со стороны - главное, что код работает.
0
24.11.2018, 11:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2018, 11:57
Помогаю со студенческими работами здесь

Перемножить матрицы произвольного размера
#include &lt;iostream&gt; using std::cin; using std::cout; using std::endl; int main() { int...

Строковый массив произвольного размера
Можно ли каким-то образом образом написать программу, в которой будет вводиться строковый массив...

Транспонирование матрицы произвольного размера
Здравствуйте! В университете начали изучать подпрограммы, пока не могу толком в них разобраться....

Матрицу произвольного размера преобразовать в вектор
ребят такое дело. сам с++ норм знаю, но давно не работал (1 год) все по забывал вот снова...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru