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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.83
pigah
 Аватар для pigah
12 / 12 / 2
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
14.07.2009, 22:27     Посимвольный анализ и преобразование строк. Строки и числа #1
Помогите пожалуйста решить только начал строки изучать не очень понятно как это делать
1.Дана строка. Подсчитать количество содержащихся в ней цифр.
2. Дана строка. Подсчитать количество содержащихся в ней прописных латинских букв.
3. Дана строка. Подсчитать общее количество содержащихся в ней строчных латинских и русских букв.
4. Дана строка. Преобразовать в ней все прописные латинские буквы в строчные.
5. Дана строка. Преобразовать в ней все строчные буквы (как латинские, так и русские) в прописные.
6. Дана строка. Преобразовать в ней все строчные буквы (как латинские, так и русские) в прописные, а прописные — в строчные.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1330 / 863 / 50
Регистрация: 02.01.2009
Сообщений: 2,621
Записей в блоге: 1
14.07.2009, 22:54     Посимвольный анализ и преобразование строк. Строки и числа #2
Цитата Сообщение от pigah Посмотреть сообщение
Помогите пожалуйста решить только начал строки изучать не очень понятно как это делать
так код показуй что уже сделал..
Цитата Сообщение от pigah Посмотреть сообщение
1.Дана строка. Подсчитать количество содержащихся в ней цифр.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <algorithm>
#include <string>
 
int main()
{  
    std::string str("abs123456abs");
    std::cout << str << std::endl;
    std::cout << "count digit: " << std::count_if(str.begin(), str.end(), isdigit) << std::endl;
    return 0;
}
pigah
 Аватар для pigah
12 / 12 / 2
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
15.07.2009, 01:03  [ТС]     Посимвольный анализ и преобразование строк. Строки и числа #3
Цитата Сообщение от ISergey Посмотреть сообщение
так код показуй что уже сделал..

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <algorithm>
#include <string>
 
int main()
{  
    std::string str("abs123456abs");
    std::cout << str << std::endl;
    std::cout << "count digit: " << std::count_if(str.begin(), str.end(), isdigit) << std::endl;
    return 0;
}
я не пойму что ты написал я еще такого не знаю я пишу так
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
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <iomanip>
#include <cmath>
#include <conio.h>
#include <string.h>
#include <limits.h>
 
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    const int N=100;
    char *a=new char [N];
    cout<<"\nВведите текст и числа >>_";
    cin.getline(a,N);
    cout<<"\n\nВаш текст:\n"<<a<<"\n";
 
    cout<<"\nДля продолжения нажмите любую клавишу . . .\n";
    _getch();
        delete []a;
    return 0;
}
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
15.07.2009, 01:14     Посимвольный анализ и преобразование строк. Строки и числа #4
pigah, ну хотя бы так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include <iostream>
 
void main()
{
    const int n=100;
    char *str=new char [n];
    std::cout<<"Input text:"<<std::endl;
    std::cin.getline(str,n);
    std::cout<<"\nYour text:\n"<<str<<"\n";
    int count(0), i(0);
    while(str[i])
    {
        if((int)str[i] > 47 && (int)str[i]<58)
            count++;
        i++;
    }
    std::cout<<"\nAmount of numbers:\n"<<count;
    delete []str;
    std::cin.get();
    std::cin.get();
}
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1330 / 863 / 50
Регистрация: 02.01.2009
Сообщений: 2,621
Записей в блоге: 1
15.07.2009, 01:22     Посимвольный анализ и преобразование строк. Строки и числа #5
M128K145,Вместо этого
Цитата Сообщение от M128K145 Посмотреть сообщение
C++
1
 if((int)str[i] > 47 && (int)str[i]<58)
лучше так
C++
1
if(isdigit(str[i]))
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
15.07.2009, 01:42     Посимвольный анализ и преобразование строк. Строки и числа #6
Вот первые три задания:
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
#include "stdafx.h"
#include <iostream>
 using namespace std;
void main()
{
    const int n=100;
    char *str=new char [n];
    cout<<"Input text:"<<std::endl;
    cin.getline(str,n);
    cout<<"\nYour text:\n"<<str<<"\n";
    int cNumb(0), cLatU(0), cLatRus(0), i(0);
 
    while(str[i])
    {
        if((int)str[i] > 47 && (int)str[i] < 58) //цифры
            cNumb++;
        if((int)str[i] > 64 && (int)str[i] < 91) //прописные латинские
            cLatU++;
        if(((int)str[i] > 96 && (int)str[i] < 123) || 
           ((int)str[i] > -97 && (int)str[i] < -80) || 
           ((int)str[i] > -33 && (int)str[i] < -16)) //строчные русские и латинские
            cLatRus++;
        i++;
    }
    cout<<"\nNumbers:  "<<cNumb<<"\nUpper Latin:  "<<cLatU<<"\nLower Rus and Latin:  "<<cLatRus;
    delete []str;
    std::cin.get();
    std::cin.get();
}
По вопросам обращайся, если надо, то завтра допишу остальные три

ISergey, я ж не спорю, но если он не знает библиотеку алгоритмов, то я решил попроще написать, тем более следующие два задания похожи
pigah
 Аватар для pigah
12 / 12 / 2
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
15.07.2009, 01:52  [ТС]     Посимвольный анализ и преобразование строк. Строки и числа #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 "stdafx.h"
#include <iostream>
#include <windows.h>
#include <iomanip>
#include <cmath>
#include <conio.h>
#include <string.h>
#include <limits.h>
 
using namespace std;
 
bool itsDigit(char c);
void main(){ 
    SetConsoleOutputCP(1251);   
    SetConsoleCP(1251);  
    const int N=60;
    char *s=new char[N]; 
    cout<<"\n\nВведите строку>"; 
    cin.getline(s,N);   
    int digCounter=0;  
    char *p=s;     
    while(p){     
        if(itsDigit(*p))  
            digCounter++;  
        p++;        
        }                    
    cout<<"\n\nВ введеннной строке: "<<digCounter<<" - цифр\n\n"; 
    }       
bool itsDigit(char c){  
    return c>='0'&&c<='9';
    }
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1330 / 863 / 50
Регистрация: 02.01.2009
Сообщений: 2,621
Записей в блоге: 1
15.07.2009, 02:00     Посимвольный анализ и преобразование строк. Строки и числа #8
pigah, о уже успехи есть.
PS. здесь
C++
1
char *s=new char[N];
ты память выделил, а потом кто удалять будет?
pigah
 Аватар для pigah
12 / 12 / 2
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
15.07.2009, 02:16  [ТС]     Посимвольный анализ и преобразование строк. Строки и числа #9
Цитата Сообщение от M128K145 Посмотреть сообщение
C++
1
2
    std::cin.get();
    std::cin.get();
А зачем это?
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1330 / 863 / 50
Регистрация: 02.01.2009
Сообщений: 2,621
Записей в блоге: 1
15.07.2009, 02:21     Посимвольный анализ и преобразование строк. Строки и числа #10
Цитата Сообщение от pigah Посмотреть сообщение
А зачем это?
чтобы программа ожидала нажатия enter.
pigah
 Аватар для pigah
12 / 12 / 2
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
15.07.2009, 02:57  [ТС]     Посимвольный анализ и преобразование строк. Строки и числа #11
понятно но можно и так
#include <conio.h>
...
_getch();

Добавлено через 4 минуты 3 секунды
я код немного переделал и вот что получилось но когда вводишь 3 латинские и 4 русские буквы показывает что строчных 6 а не 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
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <iomanip>
#include <cmath>
#include <conio.h>
#include <string.h>
#include <limits.h>
 
using namespace std;
 
void main()
{       
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251); 
    const int N=100;
    char *s=new char [N];
    cout<<"\nВведите текст и числа >>_";
    cin.getline(s,N);
    cout<<"\n\nВаш текст:"<<s<<"\n";  
    int cNumb=0,cLatU=0,cLatRus=0,i=0;  
    while(s[i]){    
        if((int)s[i] > 47 && (int)s[i] < 58) //цифры  
            cNumb++;    
        if((int)s[i] > 64 && (int)s[i] < 91) //прописные латинские 
            cLatU++;  
        if(((int)s[i]>96&&(int)s[i]<123)||
            ((int)s[i]>-97&&(int)s[i]<-80)||
            ((int)s[i]>-33&&(int)s[i]<-16))//строчные русские и латинские
            cLatRus++;
        i++; 
        }  //while  
    cout<<"\nЧисел:  "<<cNumb<< 
        "\nПрописных латинских букв:  "<<cLatU<<
        "\nСтрочных латинских и русских букв:  "<<cLatRus<<"\n\n";
    delete []s; 
    }
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1330 / 863 / 50
Регистрация: 02.01.2009
Сообщений: 2,621
Записей в блоге: 1
15.07.2009, 03:28     Посимвольный анализ и преобразование строк. Строки и числа #12
Цитата Сообщение от pigah Посмотреть сообщение
понятно но можно и так
#include <conio.h>
...
_getch();
Можно но не нужно.
pigah
 Аватар для pigah
12 / 12 / 2
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
15.07.2009, 03:53  [ТС]     Посимвольный анализ и преобразование строк. Строки и числа #13
Цитата Сообщение от ISergey Посмотреть сообщение
Можно но не нужно.
А почему это не правильно ?

Добавлено через 4 минуты 34 секунды
все нашел ошибку))
C++
1
((int)s[i]>-33&&(int)s[i]<=-1))
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1330 / 863 / 50
Регистрация: 02.01.2009
Сообщений: 2,621
Записей в блоге: 1
15.07.2009, 03:57     Посимвольный анализ и преобразование строк. Строки и числа #14
Цитата Сообщение от pigah Посмотреть сообщение
А почему это не правильно ?
Цитата Сообщение от zim22 Посмотреть сообщение
избегайте использовать заголовок conio - он не поддерживается стандартом. вместо getch() используйте std::cin.get();
Вот так.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
15.07.2009, 13:00     Посимвольный анализ и преобразование строк. Строки и числа #15
Цитата Сообщение от pigah
все нашел ошибку))
C++
1
((int)s[i]>-33&&(int)s[i]<=-1))
а почему -1? Должно же быть -16

Еще, если надо, то вот есть 4-6 задания:
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
char* Task4(char *ch)
{
    int i(0);
    while(ch[i])
    {
        if((int)ch[i] > 64 && (int)ch[i] < 91)  
            ch[i] += 32;
        ++i;
    }
    return ch;
}
 
char* Task5(char *ch)
{
    int i(0);
    while(ch[i])
    {
        if(((int)ch[i] > 96 && (int)ch[i] < 123) || 
           ((int)ch[i] > -97 && (int)ch[i] < -80))
            ch[i] -= 32;
        else
            if((int)ch[i] > -33 && (int)ch[i] < -16)
                ch[i]-= 80;
        ++i;
    }
    return ch;
}
 
char* Task6(char *ch)
{
    int i(0);
    while(ch[i])
    {
        if(((int)ch[i] > 96 && (int)ch[i] < 123) || 
           ((int)ch[i] > -97 && (int)ch[i] < -80))
            ch[i] -= 32;
        else
            if((int)ch[i] > -33 && (int)ch[i] < -16)
                ch[i]-= 80;
            else 
                if(((int)ch[i] > 64 && (int)ch[i] < 91) ||
                   ((int)ch[i] > -129 && (int)ch[i] < -112))
                   ch[i] += 32;
                else 
                    if((int)ch[i] > -113 && (int)ch[i] < -96)
                        ch[i] +=80;
        ++i;
    }
    return ch;
}
А вызов такой:
C++
1
std::cout<<"\nTask 4. Text:\n"<<Task4(str)<<std::endl;
ЗЫ: заодно и работу с функциями начнеш учить
pigah
 Аватар для pigah
12 / 12 / 2
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
15.07.2009, 20:25  [ТС]     Посимвольный анализ и преобразование строк. Строки и числа #16
Цитата Сообщение от M128K145 Посмотреть сообщение
а почему -1? Должно же быть -16
потому что я использую кодировку 1251;
А функции я знаю)
alexandra18
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 6
05.05.2015, 16:12     Посимвольный анализ и преобразование строк. Строки и числа #17
M128K145, помогите пожалуйста
1.Вывести последовательность слов, в которых буквы упорядочены по алфавиту
2.Даны две строки, состоящие из слов, разделенных пробелами. Сформвать строку состоящую из слов, которые: встречаются хотя бы в одной строке
3.Дана строка. Подсчитать количество содержащихся в ней цифр
4. Написать программу, которая демонстрирует работу созданной вами функции. Функция подсчитывает количество слов в строке.

В задачах нельзя использовать библиотеку string.h(<string>)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2015, 16:01     Посимвольный анализ и преобразование строк. Строки и числа
Еще ссылки по теме:

C++ Классы строк, массивы преобразование и т.д
Пусть текстовый файл t разбит на непустые строки. Описать функцию count(t) для подсчета числа строк, которые начинаются и оканчиваются одной и той же C++
Преобразование строк C++

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

Или воспользуйтесь поиском по форуму:
alexandra18
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 6
10.05.2015, 16:01     Посимвольный анализ и преобразование строк. Строки и числа #18
///
Yandex
Объявления
10.05.2015, 16:01     Посимвольный анализ и преобразование строк. Строки и числа
Ответ Создать тему
Опции темы

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