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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
#1

Задача на строки - C++

30.11.2013, 16:02. Просмотров 294. Ответов 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <cstdlib>
using namespace std;
int func()
{
    char ch[6];
    int year;
    for (int i=0; i<6; i++)
    {
      cout << (ch[i]=getch());
        year=(int(ch[4]-48)*10 + int(ch[5]-48));
        if (
            ch[i]<'0' || ch[i]>'6' ||
            i==1 && (ch[0]=='0'&&ch[1]=='0' ||
                     ch[0]=='3'&&ch[1]>'1'  ||
                     ch[0]>'3') ||            
                    i==3 && (ch[2]=='0'&&ch[3]=='0' ||
                     ch[2]=='1'&&ch[3]>'2'  ||
                     ch[2]>'1') ||            
 
            i==3 && ch[0]=='3'&&ch[1]>'0' && (ch[2]=='0'&&ch[3]=='4' ||
                                              ch[2]=='0'&&ch[3]=='6' ||
                                              ch[2]=='0'&&ch[3]=='9' ||
                                              ch[2]=='1'&&ch[3]=='1') ||
        
            i==3 && ch[0]=='3'&&              ch[2]=='0'&&ch[3]=='2' ||
            i==7 && ch[0]=='2'&&ch[1]>'8' &&  ch[2]=='0'&&ch[3]=='2'
            &&(year%4!=0 || year%100==0 && year%400!=0)
            )
        {
            system("cls");
            i=-1;
            cout << "Введите дату в формате дд.мм.гг: ";
        }
        if (i==1 || i==3) cout << '.';
        }
        return ch[6];
            cout << ":\n";
}
int monthmonth()
{
    char ch[6];
    int month;
    month=(int(ch[2]-48)*10 + int(ch[3]-48));
    switch (month)
    {
        case 1: cout << " январь ";
            break;
        case 2: cout << " февраль ";
            break;
        case 3: cout << " март ";
            break;
        case 4: cout << " апрель ";
            break;
        case 5: cout << " май ";
            break;
        case 6: cout << " июнь ";
            break;
        case 7: cout << " июль ";
            break;
        case 8: cout << " август ";
            break;
        case 9: cout << " сентябрь ";
            break;
        case 10: cout << " октябрь ";
            break;
        case 11: cout << " ноябрь ";
            break;
        case 12: cout << " декабрь ";
            break;
    }
    return ch[6];
}
int main()
{
    char ch[6];
    int year=0;
    setlocale(0,"rus");
    cout << "Введите дату в формате дд.мм.гг: ";
    func(ch);
    cout << " ";
    monthmonth(ch);
    cout << ch[0] << ch[1];
    cout << ",";
    cout <<"20"<< year;
    getch();
    return 0;
}
Миниатюры
Задача на строки  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2013, 16:02     Задача на строки
Посмотрите здесь:

задача на Строки - C++
Здравствуйте. прошу помочь мне с написанием вот такой вот программы... Даны два слова: U и V, где U - напечатанное нами неправильное...

Задача, строки, с++ - C++
. Строка состоит из слов, разделенных ровно одним пробелом, пробелов перед первым и после последнего слова нет. Поместить в начало строки...

Задача на строки - C++
Я не прошу написать код, прошу просто подсказать, как осуществить такую задачу. Есть текст, текст состоит из маленьких букв, знаков *+-...

Задача на строки - C++
Даны натуральное число n, символы s1,...,sn. Известно, что среди данных символов есть хотя бы один, отличный от пробела. Требуется...

задача на строки - C++
собственно задача. Совсем недавно Вася научился печатать на клавиатуре и выходить в интернет. Он сразу же зашел в чат и решил...

Задача на строки(С/С++) - C++
Пользователь вводит отдельно строку и символ, необходимо показать на экран номер только последнего совпадения (нумерация с единицы). ...

Задача на строки - C++
Задали на лабу в универе задачу: Словом в строке считается последовательность букв латинского алфавита, остальные символы...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
30.11.2013, 17:24     Задача на строки #2
C++
#include <iostream>
#include <vector>
#include <string>
using namespace std;
 
vector <string> strmonth 
{ 
    "январь", 
    "февраль", 
    "март", 
    "апрель", 
    "май", 
    "июнь", 
    "июль", 
    "август", 
    "сентябрь", 
    "октябрь", 
    "ноябрь", 
    "декабрь"
};
    
int main ()
{
    string s;
    cout << "Введите дату в формате дд.мм.гг : ";
    cin >> s;
    
    if(s[2] != '.' || s[5] != '.')
    {
        cout << "Неправильный формат\n"; 
        return 0; 
    }
    else if(s.size() > 8 || s.size() < 8)
    {
        cout << "Неправильный формат\n"; 
        return 0; 
    }
    else if(isdigit(s[0]) == 0 || isdigit(s[1]) == 0 || isdigit(s[3]) == 0 || isdigit(s[4]) == 0 || isdigit(s[6]) == 0 || isdigit(s[7]) == 0) 
    {
        cout << "Неправильный формат\n"; 
        return 0; 
    }
    
    int sz;
    
    char day[8];
    sz = s.copy(day, 2, 0);
    day[sz] = '\0';
    
    char month[8];
    sz = s.copy(month, 2, 3);
    month[sz] = '\0';
        
    char year[8];
    sz = s.copy(year, 2, 6);
    year[sz] = '\0';
    
    int imonth = stoi(month);
 
    string out = strmonth[imonth-1] + " " + day + " 20" + year;
 
    cout << out << endl;
}
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
30.11.2013, 18:28  [ТС]     Задача на строки #3
Цитата Сообщение от programina Посмотреть сообщение
C++
#include <iostream>
#include <vector>
#include <string>
using namespace std;
 
vector <string> strmonth 
{ 
    "январь", 
    "февраль", 
    "март", 
    "апрель", 
    "май", 
    "июнь", 
    "июль", 
    "август", 
    "сентябрь", 
    "октябрь", 
    "ноябрь", 
    "декабрь"
};
    
int main ()
{
    string s;
    cout << "Введите дату в формате дд.мм.гг : ";
    cin >> s;
    
    if(s[2] != '.' || s[5] != '.')
    {
        cout << "Неправильный формат\n"; 
        return 0; 
    }
    else if(s.size() > 8 || s.size() < 8)
    {
        cout << "Неправильный формат\n"; 
        return 0; 
    }
    else if(isdigit(s[0]) == 0 || isdigit(s[1]) == 0 || isdigit(s[3]) == 0 || isdigit(s[4]) == 0 || isdigit(s[6]) == 0 || isdigit(s[7]) == 0) 
    {
        cout << "Неправильный формат\n"; 
        return 0; 
    }
    
    int sz;
    
    char day[8];
    sz = s.copy(day, 2, 0);
    day[sz] = '\0';
    
    char month[8];
    sz = s.copy(month, 2, 3);
    month[sz] = '\0';
        
    char year[8];
    sz = s.copy(year, 2, 6);
    year[sz] = '\0';
    
    int imonth = stoi(month);
 
    string out = strmonth[imonth-1] + " " + day + " 20" + year;
 
    cout << out << endl;
}
А мой код не годится?
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
30.11.2013, 18:31     Задача на строки #4
Цитата Сообщение от aimbat Посмотреть сообщение
А мой код не годится?
Не знаю, не смотрела ваш код.

Добавлено через 2 минуты
Цитата Сообщение от aimbat Посмотреть сообщение
А мой код не годится?
Нет, у вас ошибки там.
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
30.11.2013, 18:50  [ТС]     Задача на строки #5
Цитата Сообщение от programina Посмотреть сообщение
Не знаю, не смотрела ваш код.

Добавлено через 2 минуты

Нет, у вас ошибки там.
Объявляю, а оно пишет что объявление не требуется(
Что делать с этими ошибками?
Миниатюры
Задача на строки  
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
30.11.2013, 18:58     Задача на строки #6
aimbat, включите, если есть, опцию c++11 в своем компиляторе или если у вас старый компилятор, скачайте посвежее.
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
30.11.2013, 19:06     Задача на строки #7
скрины на студийные похоже. там фичу с такой инициализацией не сделали еще. может в 2013 есть.
в вашем случае можно сделать так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
vector <string> strmonth;
 
void FillStrMonth()
{
  strmonth.push_back("январь");
  ...
/*
    "январь", 
    "февраль", 
    "март", 
    "апрель", 
    "май", 
    "июнь", 
    "июль", 
    "август", 
    "сентябрь", 
    "октябрь", 
    "ноябрь", 
    "декабрь"
*/
};
и позвать такую функцию в самом начале меина, чтоба она заполнила вектор месяцев.
stoi похоже функция преобразования имени месяца в его номер. не увидел ее в коде.
если ее нет - нужно просто написать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2013, 19:10     Задача на строки
Еще ссылки по теме:

Задача на строки ( - C++
Привет всем) Не могу решить задачу: &quot;Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два...

Строки. Задача по С++ - C++
Преобразовать строку так, чтобы буквы каждого слова в ней были отсортированы по возрастанию.

Задача на строки! - C++
Такая вот задачка: Ввести строку символов и подсчитать количество повторений слов одинаковой длины. Изъять все слова заданной пользователем...

Задача на строки - C++
Подскажите, где можно посмотреть пример решения такой задачи, или хотя бы что-то из этого: Даны строки S1 и S2. Сформировать строку S...

Задача на строки - C++
Суть задачи такая. Есть строка и есть подстрока, найти все вхождение строки в подстроку и отделить пробелами. При этом желательно работать...


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

Или воспользуйтесь поиском по форуму:
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
30.11.2013, 19:10     Задача на строки #8
aimbat, вот так должно работать на устаревшей версии стандарта
C++
#include <iostream>
#include <vector>
#include <string>
#include <cstdlib>
using namespace std;
 
 
 
int main ()
{
    vector <string> strmonth(12);
    strmonth[0] = "январь";
    strmonth[1] = "февраль";
    strmonth[2] = "март";
    strmonth[3] = "апрель";
    strmonth[4] = "май";
    strmonth[5] = "июнь";
    strmonth[6] = "июль";
    strmonth[7] = "август";
    strmonth[8] = "сентябрь";
    strmonth[9] = "октябрь";
    strmonth[10] = "ноябрь";
    strmonth[11] = "декабрь";
 
    string s;
    cout << "Введите дату в формате дд.мм.гг : ";
    cin >> s;
 
    if(s[2] != '.' || s[5] != '.')
    {
        cout << "Неправильный формат\n";
        return 0;
    }
    else if(s.size() > 8 || s.size() < 8)
    {
        cout << "Неправильный формат\n";
        return 0;
    }
    else if(isdigit(s[0]) == 0 || isdigit(s[1]) == 0 || isdigit(s[3]) == 0 || isdigit(s[4]) == 0 || isdigit(s[6]) == 0 || isdigit(s[7]) == 0)
    {
        cout << "Неправильный формат\n";
        return 0;
    }
 
    int sz;
 
    char day[8];
    sz = s.copy(day, 2, 0);
    day[sz] = '\0';
 
    char month[8];
    sz = s.copy(month, 2, 3);
    month[sz] = '\0';
 
    char year[8];
    sz = s.copy(year, 2, 6);
    year[sz] = '\0';
 
    int imonth = atoi(month);
 
    string out = strmonth[imonth-1] + " " + day + " 20" + year;
 
    cout << out << endl;
}
Добавлено через 2 минуты
Цитата Сообщение от DU Посмотреть сообщение
stoi похоже функция преобразования имени месяца в его номер. не увидел ее в коде.
если ее нет - нужно просто написать.
stoi замена (c++11) для atoi, если не ошибаюсь
Yandex
Объявления
30.11.2013, 19:10     Задача на строки
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru