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

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

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

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

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

Помогите пожалуйста решить только начал строки изучать не очень понятно как это делать
1.Дана строка. Подсчитать количество содержащихся в ней цифр.
2. Дана строка. Подсчитать количество содержащихся в ней прописных латинских букв.
3. Дана строка. Подсчитать общее количество содержащихся в ней строчных латинских и русских букв.
4. Дана строка. Преобразовать в ней все прописные латинские буквы в строчные.
5. Дана строка. Преобразовать в ней все строчные буквы (как латинские, так и русские) в прописные.
6. Дана строка. Преобразовать в ней все строчные буквы (как латинские, так и русские) в прописные, а прописные — в строчные.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2009, 22:27     Посимвольный анализ и преобразование строк. Строки и числа
Посмотрите здесь:
Посимвольный сдвиг строки C++
C++ Функции потока: Если строки хранят числа, то выводится сумма, иначе – конкатенация строк
Если обе строки хранят целые числа, то выводится сумма чисел, в противном случае – конкатенация строк C++
Преобразование строк C++
Пусть текстовый файл t разбит на непустые строки. Описать функцию count(t) для подсчета числа строк, которые начинаются и оканчиваются одной и той же C++
Анализ данных строки C++
Анализ входной строки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 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
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
Эксперт С++
8284 / 3503 / 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();
}
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 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
Эксперт С++
8284 / 3503 / 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, я ж не спорю, но если он не знает библиотеку алгоритмов, то я решил попроще написать, тем более следующие два задания похожи
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
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
15.07.2009, 02:00     Посимвольный анализ и преобразование строк. Строки и числа #8
pigah, о уже успехи есть.
PS. здесь
C++
1
char *s=new char[N];
ты память выделил, а потом кто удалять будет?
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
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
15.07.2009, 02:21     Посимвольный анализ и преобразование строк. Строки и числа #10
Цитата Сообщение от pigah Посмотреть сообщение
А зачем это?
чтобы программа ожидала нажатия enter.
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
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
15.07.2009, 03:28     Посимвольный анализ и преобразование строк. Строки и числа #12
Цитата Сообщение от pigah Посмотреть сообщение
понятно но можно и так
#include <conio.h>
...
_getch();
Можно но не нужно.
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
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
15.07.2009, 03:57     Посимвольный анализ и преобразование строк. Строки и числа #14
Цитата Сообщение от pigah Посмотреть сообщение
А почему это не правильно ?
Цитата Сообщение от zim22 Посмотреть сообщение
избегайте использовать заголовок conio - он не поддерживается стандартом. вместо getch() используйте std::cin.get();
Вот так.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2009, 13:00     Посимвольный анализ и преобразование строк. Строки и числа
Еще ссылки по теме:
Частотный анализ строки C++
C++ Анализ введённого числа
Анализ введённого числа C++
Добавить строки, начиная со строки К1 и до строки К2, в динамический массив строк C++
C++ Преобразование строк, удаление символов

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

Или воспользуйтесь поиском по форуму:
M128K145
Эксперт С++
8284 / 3503 / 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;
ЗЫ: заодно и работу с функциями начнеш учить
Yandex
Объявления
15.07.2009, 13:00     Посимвольный анализ и преобразование строк. Строки и числа
Ответ Создать тему
Опции темы

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