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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Steam.dll
 Аватар для Steam.dll
3 / 3 / 0
Регистрация: 05.11.2010
Сообщений: 131
23.01.2011, 14:02     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #1
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
210 / 210 / 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
 Аватар для 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
210 / 210 / 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
210 / 210 / 16
Регистрация: 26.12.2010
Сообщений: 691
23.01.2011, 14:29     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #6
Цитата Сообщение от Steam.dll Посмотреть сообщение
это cout с опечаткой или что то мне не известное?
это переменная count, я просто опечатался ..

Цитата Сообщение от Steam.dll Посмотреть сообщение
мы еще такое не проходили и я не совсем это понимаю разьясните .
эта функция позволяет определить сколько памяти выделяется под переменную. здесь для определения размера цикла мы делим общий объем, выделенный под весь массив, на то что занимает первый элемент массива.
Steam.dll
 Аватар для Steam.dll
3 / 3 / 0
Регистрация: 05.11.2010
Сообщений: 131
23.01.2011, 14:57  [ТС]     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #7
А что такое вложанный цикл?
asics
Freelance
Эксперт C++
 Аватар для asics
2841 / 1778 / 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
 Аватар для Steam.dll
3 / 3 / 0
Регистрация: 05.11.2010
Сообщений: 131
23.01.2011, 15:10  [ТС]     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #9
а массив с 0-9 должен выглядеть так char dva[]="0123456789";?
и для проверки надо пользоватся функцией isdigit()?
igorrr37
 Аватар для igorrr37
1600 / 1228 / 121
Регистрация: 21.12.2010
Сообщений: 1,875
Записей в блоге: 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
 Аватар для Steam.dll
3 / 3 / 0
Регистрация: 05.11.2010
Сообщений: 131
23.01.2011, 15:50  [ТС]     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ #11
почему то у меня 12 ошибок выскакивает. Спасибо за помощь но я это не разберу слишком умно для меня.

Добавлено через 20 минут
А как масивы обьявить?
NiRamz
210 / 210 / 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
 Аватар для 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
 Аватар для igorrr37
1600 / 1228 / 121
Регистрация: 21.12.2010
Сообщений: 1,875
Записей в блоге: 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
 Аватар для igorrr37
1600 / 1228 / 121
Регистрация: 21.12.2010
Сообщений: 1,875
Записей в блоге: 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
 Аватар для 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     РАБОТА С ТЕКСТОВЫМИ ДАННЫМИ
Ответ Создать тему
Опции темы

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