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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Steam.dll
3 / 3 / 0
Регистрация: 05.11.2010
Сообщений: 131
#1

РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ - C++

23.01.2011, 14:02. Просмотров 1592. Ответов 28
Метки нет (Все метки)

1 Написать программу, которая читает с клавиатуры строку символов, преобразует ее и выводит результат на дисплей.
2 Если в строке пробелов меньше, чем цифр, удвоить каждый пробел.
Вот с первым заданием я справился там очень легко , а вот как отличить пробел от цифр и как узнать их количество незнаюнезнаю и как удвоить его тоже.
вот 1 задание помогите сделать дальше
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <string.h>
int main(void)
{
    char str[100];
    gets(str);
    printf("%s", str);
    printf("\n");
    
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
23.01.2011, 14:17     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #2
Цитата Сообщение от Steam.dll Посмотреть сообщение
а вот как отличить пробел от цифр и как узнать их количество незнаюнезнаю
не очень сложно.
C++
1
2
3
for(int i=0; i<sizeof(str)/sizeof(str[0]); i++){
        if(str[i] == ' '){
            count++;}}
Steam.dll
3 / 3 / 0
Регистрация: 05.11.2010
Сообщений: 131
23.01.2011, 14:25  [ТС]     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #3
я попробывал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <string.h>
int main(void)
{
    char str[100];
    gets(str);
    printf("%s", str);
    printf("\n");
    for(int i=0; i<sizeof(str)/sizeof(str[0]); i++)
    {
        if(str[i] == ' ')
        {
           couтt++;
        }
    }
        
}
компелятор выдаёт ошибку с
C++
1
couтt++;
это cout с опечаткой или что то мне не известное?
И еще я не понимаю что такое
C++
1
sizeof
мы еще такое не проходили и я не совсем это понимаю разьясните .
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
23.01.2011, 14:27     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #4
Цитата Сообщение от Steam.dll Посмотреть сообщение
Если в строке пробелов меньше, чем цифр, удвоить каждый пробел
создать еще один массив, в котором хранятся цифры от 0 до 9. далее делаем вложенный цикл, который каждый проверят цифра ли введена и если да, то счетчик учеличиваем на единицу. дальше условие, если цифр меньше пробелов, то опять же делаем цикл, в котором элементам массива с символом ' ' присваивается просто значение с двумя пробелами. все довольно просто ..)
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
23.01.2011, 14:28     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #5
переменная count не объявлена + она у вас неправильно написана
sizeof - это определение размера
считаете количество пробелов, потом создаете новую строку равную strelen(str) + count(кол-во пробелов) + 1(под 0 символ) и туда пишите
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
23.01.2011, 14:29     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #6
Цитата Сообщение от Steam.dll Посмотреть сообщение
это cout с опечаткой или что то мне не известное?
это переменная count, я просто опечатался ..

Цитата Сообщение от Steam.dll Посмотреть сообщение
мы еще такое не проходили и я не совсем это понимаю разьясните .
эта функция позволяет определить сколько памяти выделяется под переменную. здесь для определения размера цикла мы делим общий объем, выделенный под весь массив, на то что занимает первый элемент массива.
Steam.dll
3 / 3 / 0
Регистрация: 05.11.2010
Сообщений: 131
23.01.2011, 14:57  [ТС]     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #7
А что такое вложанный цикл?
asics
Freelance
Эксперт C++
2842 / 1779 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
23.01.2011, 15:06     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #8
Цитата Сообщение от Steam.dll Посмотреть сообщение
А что такое вложанный цикл?
Цыкл в цыкле.
C
1
2
3
4
5
for(int i = 0; i < some_num; ++i)
   for(int j = 0; j < some_num; ++j)//Это и есть вложеный цыкл.
   {
     
   }
Steam.dll
3 / 3 / 0
Регистрация: 05.11.2010
Сообщений: 131
23.01.2011, 15:10  [ТС]     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #9
а массив с 0-9 должен выглядеть так char dva[]="0123456789";?
и для проверки надо пользоватся функцией isdigit()?
igorrr37
1614 / 1242 / 124
Регистрация: 21.12.2010
Сообщений: 1,899
Записей в блоге: 7
23.01.2011, 15:24     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include<algorithm>
using namespace std;
 
int main(){
    char c[100]{'\0'};
    char d[100]{'\0'};
    cin.getline(c, sizeof(c));
    int ws=(int)count(c, c+100, ' ');
    int dig=(int)count_if(c, c+100, [](char& c){return c>='0'&&c<='9';});
    cout<<"ws= "<<ws<<"\n"<<"dig= "<<dig<<"\n";
    if(ws<dig){
        for(char* a=c, *b=d; (*b=*a)!='\0'; a++, b++){
            if(*a==' ') *(++b)=' ';
        }
    }
    cout<<d;
}
Steam.dll
3 / 3 / 0
Регистрация: 05.11.2010
Сообщений: 131
23.01.2011, 15:50  [ТС]     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #11
почему то у меня 12 ошибок выскакивает. Спасибо за помощь но я это не разберу слишком умно для меня.

Добавлено через 20 минут
А как масивы обьявить?
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
23.01.2011, 15:53     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #12
массивы чего?
Цитата Сообщение от Steam.dll Посмотреть сообщение
char str[100];
вы тут объявляете символьный массив
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
23.01.2011, 15:54     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #13
список ошибок в студию
Steam.dll
3 / 3 / 0
Регистрация: 05.11.2010
Сообщений: 131
23.01.2011, 15:59  [ТС]     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #14
массив символьный и с цифрами от 0до9. Чтобы их потом сравнитть сколько цифр. и вот ошибки той программы
--------------------Configuration: 1 - Win32 Debug--------------------
Compiling...
1.cpp
C:\Users\Àíäðåé\Desktop\Lab\8\8_1\1.cpp(6) : error C2601: 'c' : local function definitions are illegal
C:\Users\Àíäðåé\Desktop\Lab\8\8_1\1.cpp(6) : error C2063: 'c' : not a function
C:\Users\Àíäðåé\Desktop\Lab\8\8_1\1.cpp(7) : error C2601: 'd' : local function definitions are illegal
C:\Users\Àíäðåé\Desktop\Lab\8\8_1\1.cpp(7) : error C2063: 'd' : not a function
C:\Users\Àíäðåé\Desktop\Lab\8\8_1\1.cpp(10) : error C2059: syntax error : '['
C:\Users\Àíäðåé\Desktop\Lab\8\8_1\1.cpp(10) : error C2143: syntax error : missing ')' before '{'
C:\Users\Àíäðåé\Desktop\Lab\8\8_1\1.cpp(10) : error C2143: syntax error : missing ';' before '{'
C:\Users\Àíäðåé\Desktop\Lab\8\8_1\1.cpp(10) : error C2446: '>=' : no conversion from 'int' to 'char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
C:\Users\Àíäðåé\Desktop\Lab\8\8_1\1.cpp(10) : error C2040: '>=' : 'char [100]' differs in levels of indirection from 'int'
C:\Users\Àíäðåé\Desktop\Lab\8\8_1\1.cpp(10) : error C2446: '<=' : no conversion from 'int' to 'char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
C:\Users\Àíäðåé\Desktop\Lab\8\8_1\1.cpp(10) : error C2040: '<=' : 'char [100]' differs in levels of indirection from 'int'
C:\Users\Àíäðåé\Desktop\Lab\8\8_1\1.cpp(10) : error C2059: syntax error : ')'
Error executing cl.exe.

1.obj - 12 error(s), 0 warning(s)
igorrr37
1614 / 1242 / 124
Регистрация: 21.12.2010
Сообщений: 1,899
Записей в блоге: 7
23.01.2011, 16:06     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #15
вот ещё вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
int main(){
    char c[100]={'\0'};
    char d[100]={'\0'};
    cin.getline(c, sizeof(c));
    int ws=0, dig=0;
    for(char* a=c; *a!='\0'; a++){
        if(*a==' ') ++ws;
        if(isdigit(*a)) ++dig;
    }
    cout<<"ws= "<<ws<<"\n"<<"dig= "<<dig<<"\n";
    if(ws<dig){
        for(char* a=c, *b=d; (*b=*a)!='\0'; a++, b++){
            if(*a==' ') *(++b)=' ';
        }
    }
    cout<<d;
}
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
23.01.2011, 16:15     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #16
igorrr37, а если длина вводимой строки неизвестна (и может быть больше сотни)?
igorrr37
1614 / 1242 / 124
Регистрация: 21.12.2010
Сообщений: 1,899
Записей в блоге: 7
23.01.2011, 16:19     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #17
>если длина вводимой строки неизвестна
тогда динамический массив
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
23.01.2011, 16:32     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #18
igorrr37, какого размера?
Можно пример?
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
23.01.2011, 16:45     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #19
Цитата Сообщение от igorrr37 Посмотреть сообщение
>если длина вводимой строки неизвестна
тогда динамический массив
если можно пример, как определить длину введенной строки и записать в дин.массив, не используя класс string
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2011, 18:09     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ
Еще ссылки по теме:

C++ Работа с текстовыми файлами
C++ Работа с текстовыми файлами
C++ Работа с текстовыми файлами
C++ Работа с текстовыми данными в символьных массивах
C++ Работа с текстовыми файлами

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

Или воспользуйтесь поиском по форуму:
Steam.dll
3 / 3 / 0
Регистрация: 05.11.2010
Сообщений: 131
23.01.2011, 18:09  [ТС]     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #20
Спасибо всем за помощь я разобрался.

Добавлено через 4 минуты
А динамический масив это масив под который мы выделяем память когда нам надо?
И в программе
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
#include <iostream>
using namespace std;
 
int main()
{
    char c[100]={'\0'};
    char d[100]={'\0'};
    cin.getline(c, sizeof(c));
    int probelov=0, zifri=0;
    for(char *a=c; *a!='\0'; a++)
    {
        if(*a==' ')
        {
            ++probelov;
        }
            
        if(isdigit(*a))
        {
            ++zifri;
        }
    }
    printf("probelov=%d\n",probelov);
    printf("zifri=%d\n", zifri);
    if(probelov<zifri)
    {
        for(char* a=c, *b=d; (*b=*a)!='\0'; a++, b++)
        {
            if(*a==' ')
            { 
                *(++b)=' ';
            }
        }
    }
    printf("TEXT-->   %s\n",d);
}
Я её по своему по колхозному переписал.
когда массив
C++
1
char *a
он со звёздочкой значит это одномерный динамический массив?
тогда сколько данных можно ввести также 100? или больше я пробивал программа после гдето 30 не фурычит.
Yandex
Объявления
23.01.2011, 18:09     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ
Ответ Создать тему
Опции темы

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