Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/39: Рейтинг темы: голосов - 39, средняя оценка - 4.56
12 / 12 / 5
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
1

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

14.07.2009, 22:27. Просмотров 7165. Ответов 17
Метки нет (Все метки)

Помогите пожалуйста решить только начал строки изучать не очень понятно как это делать
1.Дана строка. Подсчитать количество содержащихся в ней цифр.
2. Дана строка. Подсчитать количество содержащихся в ней прописных латинских букв.
3. Дана строка. Подсчитать общее количество содержащихся в ней строчных латинских и русских букв.
4. Дана строка. Преобразовать в ней все прописные латинские буквы в строчные.
5. Дана строка. Преобразовать в ней все строчные буквы (как латинские, так и русские) в прописные.
6. Дана строка. Преобразовать в ней все строчные буквы (как латинские, так и русские) в прописные, а прописные — в строчные.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.07.2009, 22:27
Ответы с готовыми решениями:

Посимвольный анализ текста
Уважаемые знатоки! Можете мне немного помочь? никак не могу понять что я упускаю из виду. Текст из...

Посимвольный анализ Edit
Необходимо по введению/удалению символа в Edit-е выполнить набор действий. Как возможно получить...

Анализ и преобразование текста строки.
Ввести натуральное число. построить строку, содержащую запись этого числа в римской системе...

анализ и преобразование текста строки
ввести строку, состоящую из нескольких предложений. построить результирующую строку, содержащую...

17
Maniac
Эксперт С++
1446 / 948 / 158
Регистрация: 02.01.2009
Сообщений: 2,813
Записей в блоге: 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;
}
1
12 / 12 / 5
Регистрация: 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;
}
0
Эксперт JavaЭксперт С++
8360 / 3581 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
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();
}
0
Maniac
Эксперт С++
1446 / 948 / 158
Регистрация: 02.01.2009
Сообщений: 2,813
Записей в блоге: 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]))
0
Эксперт JavaЭксперт С++
8360 / 3581 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
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, я ж не спорю, но если он не знает библиотеку алгоритмов, то я решил попроще написать, тем более следующие два задания похожи
1
12 / 12 / 5
Регистрация: 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';
    }
0
Maniac
Эксперт С++
1446 / 948 / 158
Регистрация: 02.01.2009
Сообщений: 2,813
Записей в блоге: 1
15.07.2009, 02:00 8
pigah, о уже успехи есть.
PS. здесь
C++
1
char *s=new char[N];
ты память выделил, а потом кто удалять будет?
0
12 / 12 / 5
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
15.07.2009, 02:16  [ТС] 9
Цитата Сообщение от M128K145 Посмотреть сообщение
C++
1
2
    std::cin.get();
    std::cin.get();
А зачем это?
0
Maniac
Эксперт С++
1446 / 948 / 158
Регистрация: 02.01.2009
Сообщений: 2,813
Записей в блоге: 1
15.07.2009, 02:21 10
Цитата Сообщение от pigah Посмотреть сообщение
А зачем это?
чтобы программа ожидала нажатия enter.
0
12 / 12 / 5
Регистрация: 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; 
    }
0
Maniac
Эксперт С++
1446 / 948 / 158
Регистрация: 02.01.2009
Сообщений: 2,813
Записей в блоге: 1
15.07.2009, 03:28 12
Цитата Сообщение от pigah Посмотреть сообщение
понятно но можно и так
#include <conio.h>
...
_getch();
Можно но не нужно.
0
12 / 12 / 5
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
15.07.2009, 03:53  [ТС] 13
Цитата Сообщение от ISergey Посмотреть сообщение
Можно но не нужно.
А почему это не правильно ?

Добавлено через 4 минуты 34 секунды
все нашел ошибку))
C++
1
((int)s[i]>-33&&(int)s[i]<=-1))
0
Maniac
Эксперт С++
1446 / 948 / 158
Регистрация: 02.01.2009
Сообщений: 2,813
Записей в блоге: 1
15.07.2009, 03:57 14
Цитата Сообщение от pigah Посмотреть сообщение
А почему это не правильно ?
Цитата Сообщение от zim22 Посмотреть сообщение
избегайте использовать заголовок conio - он не поддерживается стандартом. вместо getch() используйте std::cin.get();
Вот так.
0
Эксперт JavaЭксперт С++
8360 / 3581 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
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;
ЗЫ: заодно и работу с функциями начнеш учить
1
12 / 12 / 5
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
15.07.2009, 20:25  [ТС] 16
Цитата Сообщение от M128K145 Посмотреть сообщение
а почему -1? Должно же быть -16
потому что я использую кодировку 1251;
А функции я знаю)
0
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 6
05.05.2015, 16:12 17
M128K145, помогите пожалуйста
1.Вывести последовательность слов, в которых буквы упорядочены по алфавиту
2.Даны две строки, состоящие из слов, разделенных пробелами. Сформвать строку состоящую из слов, которые: встречаются хотя бы в одной строке
3.Дана строка. Подсчитать количество содержащихся в ней цифр
4. Написать программу, которая демонстрирует работу созданной вами функции. Функция подсчитывает количество слов в строке.

В задачах нельзя использовать библиотеку string.h(<string>)
0
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 6
10.05.2015, 16:01 18
///
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2015, 16:01

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Анализ и преобразование текста строки
помогите расписать программу в TP плиз Нужно ввести строку, содержащую только символы латинского...

Преобразование строк в числа
Всем привет. никак не могу решить задачку, преобразовать на выводе строки в цифры. Пример на ввод...

Преобразование строк в числа
Вечер добрый. Я к вам с элементарным вопросом, так как открыл Шилдта только сегодня. Почему...

Преобразование строк в числа
function setChar(b){ $('.char').html(b); window.b=b; ...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

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