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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.83
pigah
12 / 12 / 2
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
#1

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

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

Помогите пожалуйста решить только начал строки изучать не очень понятно как это делать
1.Дана строка. Подсчитать количество содержащихся в ней цифр.
2. Дана строка. Подсчитать количество содержащихся в ней прописных латинских букв.
3. Дана строка. Подсчитать общее количество содержащихся в ней строчных латинских и русских букв.
4. Дана строка. Преобразовать в ней все прописные латинские буквы в строчные.
5. Дана строка. Преобразовать в ней все строчные буквы (как латинские, так и русские) в прописные.
6. Дана строка. Преобразовать в ней все строчные буквы (как латинские, так и русские) в прописные, а прописные — в строчные.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2009, 22:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Посимвольный анализ и преобразование строк. Строки и числа (C++):

Посимвольный сдвиг строки - C++
Народ, помогите, пожалуйста, нубу. Нужно написать программу, которая сдвигает строку на k символов вправо. То есть если исходная строка...

Функции потока: Если строки хранят числа, то выводится сумма, иначе – конкатенация строк - C++
Л.Р.2 Вариант №5 ------------ Разработать программу, осуществляющую ввод двух строк, введенных пользователем. Далее, если обе...

Если обе строки хранят целые числа, то выводится сумма чисел, в противном случае – конкатенация строк - C++
Т.к я в этом деле вообще новичок, прошу знающих людей пожалуйста помочь мне... Л.Р.1 Вариант №5 ------------ Разработать две...

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

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

Частотный анализ строки - C++
Помогите пожалуйста дописать программу выполняющую частотный анализ строки, введенной пользователем (т. е. вычисляющей, сколько раз в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 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
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;
}
0
M128K145
Эксперт С++
8288 / 3508 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 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
M128K145
Эксперт С++
8288 / 3508 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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
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';
    }
0
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
15.07.2009, 02:00 #8
pigah, о уже успехи есть.
PS. здесь
C++
1
char *s=new char[N];
ты память выделил, а потом кто удалять будет?
0
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();
А зачем это?
0
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
15.07.2009, 02:21 #10
Цитата Сообщение от pigah Посмотреть сообщение
А зачем это?
чтобы программа ожидала нажатия enter.
0
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; 
    }
0
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
15.07.2009, 03:28 #12
Цитата Сообщение от pigah Посмотреть сообщение
понятно но можно и так
#include <conio.h>
...
_getch();
Можно но не нужно.
0
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))
0
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
15.07.2009, 03:57 #14
Цитата Сообщение от pigah Посмотреть сообщение
А почему это не правильно ?
Цитата Сообщение от zim22 Посмотреть сообщение
избегайте использовать заголовок conio - он не поддерживается стандартом. вместо getch() используйте std::cin.get();
Вот так.
0
M128K145
Эксперт С++
8288 / 3508 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2009, 13:00
Привет! Вот еще темы с ответами:

Анализ входной строки - C++
Вообщем суть состоит в том что при вводе текста из него вытаскивала именно время. Например:&quot;сейчас на часах 13:23&quot; и из этого текста нам...

Анализ данных строки - C++
В процессе решения задачи у меня появилась необходимость анализа данных строки введенной пользователем. 1)Т е пользователь вводит...

Анализ введённого числа - C++
Добрый день! Еще совсем новичок в программировании... помогите, пожалуйста, найти ошибку в коде. Нужно ввести с клавиатуры число и найти...

Анализ введённого числа - C++
С клавиатуры вводится целое число N. Найти: его максимальную и минимальную цифру; индекс первой максимальной цифры; сколько раз в...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.07.2009, 13:00
Ответ Создать тему
Опции темы

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