Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Steam.dll
3 / 3 / 2
Регистрация: 05.11.2010
Сообщений: 131
#1

Работа с текстовыми данными - C++

23.01.2011, 14:02. Просмотров 1737. Ответов 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");
    
}

http://www.cyberforum.ru/cpp-beginners/thread1397504.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2011, 14:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Работа с текстовыми данными (C++):

В чем может быть ошибка в обмене данными между двумя текстовыми файлами?
// labbb4.cpp: определяет точку входа для консольного приложения. // ...

Работа с текстовыми файлами.
Найти самое длинное симметричное слово заданного(придуманного) предложения,...

Работа с текстовыми файлами
Подскажите плиз как делать на С++ вот такое вот: Даны два текстовых файла....

Работа с текстовыми файлами
Функция копирует с одного файла в другой, не подскажите как улучшить ее? И есть...

Работа с текстовыми файлами
3)Разработать программу, которая выполняет следующие действия: создает входной...

28
NiRamz
211 / 211 / 33
Регистрация: 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++;}}
1
Steam.dll
3 / 3 / 2
Регистрация: 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
мы еще такое не проходили и я не совсем это понимаю разьясните .
0
NiRamz
211 / 211 / 33
Регистрация: 26.12.2010
Сообщений: 691
23.01.2011, 14:27 #4
Цитата Сообщение от Steam.dll Посмотреть сообщение
Если в строке пробелов меньше, чем цифр, удвоить каждый пробел
создать еще один массив, в котором хранятся цифры от 0 до 9. далее делаем вложенный цикл, который каждый проверят цифра ли введена и если да, то счетчик учеличиваем на единицу. дальше условие, если цифр меньше пробелов, то опять же делаем цикл, в котором элементам массива с символом ' ' присваивается просто значение с двумя пробелами. все довольно просто ..)
1
panicwassano
594 / 562 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
23.01.2011, 14:28 #5
переменная count не объявлена + она у вас неправильно написана
sizeof - это определение размера
считаете количество пробелов, потом создаете новую строку равную strelen(str) + count(кол-во пробелов) + 1(под 0 символ) и туда пишите
1
NiRamz
211 / 211 / 33
Регистрация: 26.12.2010
Сообщений: 691
23.01.2011, 14:29 #6
Цитата Сообщение от Steam.dll Посмотреть сообщение
это cout с опечаткой или что то мне не известное?
это переменная count, я просто опечатался ..

Цитата Сообщение от Steam.dll Посмотреть сообщение
мы еще такое не проходили и я не совсем это понимаю разьясните .
эта функция позволяет определить сколько памяти выделяется под переменную. здесь для определения размера цикла мы делим общий объем, выделенный под весь массив, на то что занимает первый элемент массива.
1
Steam.dll
3 / 3 / 2
Регистрация: 05.11.2010
Сообщений: 131
23.01.2011, 14:57  [ТС] #7
А что такое вложанный цикл?
0
asics
Freelance
Эксперт С++
2854 / 1789 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
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)//Это и есть вложеный цыкл.
   {
     
   }
1
Steam.dll
3 / 3 / 2
Регистрация: 05.11.2010
Сообщений: 131
23.01.2011, 15:10  [ТС] #9
а массив с 0-9 должен выглядеть так char dva[]="0123456789";?
и для проверки надо пользоватся функцией isdigit()?
0
igorrr37
1863 / 1481 / 749
Регистрация: 21.12.2010
Сообщений: 2,473
Записей в блоге: 11
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;
}
1
Steam.dll
3 / 3 / 2
Регистрация: 05.11.2010
Сообщений: 131
23.01.2011, 15:50  [ТС] #11
почему то у меня 12 ошибок выскакивает. Спасибо за помощь но я это не разберу слишком умно для меня.

Добавлено через 20 минут
А как масивы обьявить?
0
NiRamz
211 / 211 / 33
Регистрация: 26.12.2010
Сообщений: 691
23.01.2011, 15:53 #12
массивы чего?
Цитата Сообщение от Steam.dll Посмотреть сообщение
char str[100];
вы тут объявляете символьный массив
1
panicwassano
594 / 562 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
23.01.2011, 15:54 #13
список ошибок в студию
1
Steam.dll
3 / 3 / 2
Регистрация: 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)
0
igorrr37
1863 / 1481 / 749
Регистрация: 21.12.2010
Сообщений: 2,473
Записей в блоге: 11
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;
}
1
st_dent
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
23.01.2011, 16:15 #16
igorrr37, а если длина вводимой строки неизвестна (и может быть больше сотни)?
1
igorrr37
1863 / 1481 / 749
Регистрация: 21.12.2010
Сообщений: 2,473
Записей в блоге: 11
23.01.2011, 16:19 #17
>если длина вводимой строки неизвестна
тогда динамический массив
1
st_dent
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
23.01.2011, 16:32 #18
igorrr37, какого размера?
Можно пример?
1
panicwassano
594 / 562 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
23.01.2011, 16:45 #19
Цитата Сообщение от igorrr37 Посмотреть сообщение
>если длина вводимой строки неизвестна
тогда динамический массив
если можно пример, как определить длину введенной строки и записать в дин.массив, не используя класс string
1
Steam.dll
3 / 3 / 2
Регистрация: 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 не фурычит.
0
23.01.2011, 18:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2011, 18:09
Привет! Вот еще темы с решениями:

Работа с текстовыми файлами
Помоготи , пожалуйста : Создать текстовый файл и выполнить обработку текста в...

Работа с текстовыми файлами
Дан файл f компонентами которого являются целые числа.В файл g переписать все...

Работа с текстовыми файлами
Разработать программу, которая: а) создает текстовый файл TF5_1 с символьных...

Работа с текстовыми файлами си++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; #include...


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

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

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