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

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

Войти
Регистрация
Восстановить пароль
 
 
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
#1

Отредактировать текст так, чтобы между словами был ровно один пробел - C++

19.04.2010, 21:57. Просмотров 1100. Ответов 16
Метки нет (Все метки)

Люди, плз помогите с задачами :

№ 1. Даны две символьные строки, состоящие только из цифр (длина каждой - более 10 символов). Считая, что в этих строках находятся очень длинные целые числа, сформировать третью строку - сумму этих чисел.

№ 2. Дан произвольный текст. Отредактировать текст так, чтобы:
а) между словами был ровно один пробел;
б) предложения в тексте разделялись ровно двумя пробелами.
Очень прошу - HELP!!!

Добавлено через 13 минут
НА языке Си
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2010, 21:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отредактировать текст так, чтобы между словами был ровно один пробел (C++):

Отредактировать текст так, чтобы между словами был ровно один пробел - C++
помогите решить задачу. Дан произвольный текст.Отредактировать его так,чтобы: а)Между словами был ровно 1 пробел; б)предложения в...

Преобразовать строку так, чтобы между словами был ровно один пробел - C++
При реализации программы необходимо использовать функции обработки строк из библиотек stdlib.h и string.h Дана строка-предложение с...

Отредактировать текст, удаляя лишние символы пробелов между словами - C++
Отредактировать текст,удаляя лишние символы пробелов между словами;по нажатию произвольной клавиши выделить первое предложение текста.

Как сделать, чтобы в результате был пробел между именем и фамилией и отображалось отчество - C++
Доброго времени суток! Я только начинаю изучать язык C++ и столкнулся со сложностью в написании одной программы. Нужно, чтобы после...

Добавить пробел между словами - C++
проблема, как добавить в конце проги чтобы было пробела между словами #include <stdafx.h> #include <stdlib.h> int main() { ...

Удалить в строке лишние пробелы, оставив между словами ровно по одному - C++
Дана строка состоящая из слов, между которыми есть некое количество пробелов. Требуется удалить лишние пробелы, оставив между словами...

16
delfamur
42 / 24 / 0
Регистрация: 16.03.2010
Сообщений: 199
19.04.2010, 21:57 #2
предположим, №1
C++
1
IntToStr(sum=StrToInt(a)+StrToInt(b));
Добавлено через 23 секунды
это результат 3 строки
0
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
19.04.2010, 21:59  [ТС] #3
по-моему не все так просто
0
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
19.04.2010, 22:02 #4
а на с++ не пойдет?
0
delfamur
42 / 24 / 0
Регистрация: 16.03.2010
Сообщений: 199
19.04.2010, 22:02 #5
все гениальное просто, а ты думаешь, что тут все сложно)))
0
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
19.04.2010, 22:04 #6
Цитата Сообщение от delfamur Посмотреть сообщение
IntToStr(sum=StrToInt(a)+StrToInt(b));
неправильно, ему же надо сумму цифр строк, а не сумму строк
0
delfamur
42 / 24 / 0
Регистрация: 16.03.2010
Сообщений: 199
19.04.2010, 22:08 #7
ему нужно сложить 2 числа. так и есть

Добавлено через 2 минуты
я проверял
C++
1
IntToStr(StrToInt(a)+StrToInt(b));
можно даже так)))без интов
0
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
19.04.2010, 22:10 #8
а если a или b больше INT_MAX? - ошибка

Добавлено через 40 секунд
a=555555555555555;
b=66666666666666666;
a+b=?
0
delfamur
42 / 24 / 0
Регистрация: 16.03.2010
Сообщений: 199
19.04.2010, 22:13 #9
ну извините, выбрать тип данных для работы в состоянии ведь

Добавлено через 50 секунд
можно складывать по 6
0
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
19.04.2010, 22:13  [ТС] #10
кстати да,PointsEqual прав по-моему; на си++ пойдет, если у меня получится переделать. то вообще круто =)
0
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
21.04.2010, 20:02  [ТС] #11
Народ, плз помогите
Для задачи №2: Вот короче программка, которая удаляет из строки все пробелы
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 <stdio.h>
void compress(char *str)
{
    int i=0,j=0,k=0,l=0;
    while(str[i]==' ')
        i++;
    while(1)
    {
        while(str[j]!=' ' && str[j]!='\0')
            j++;
        if(str[j]=='\0') break;
            k=j;
        while(str[k]==' ') k++;
            l=j;
        do
        {
            str[l]=str[k];
            l++;k++;
        }while(str[k-1]!='\0');
    }
}
int main()
{
    char str[100];
    printf("Enter string:\n");
    gets(str);
    compress(str);
    printf("After compressing:\n");
    puts(str);
    return 0 ;
}
Я не знаю как ее переделать, чтобы 1)между словами был только 1 пробел;2)2 пробела.
Кто может - хелп плз

Добавлено через 11 минут
Плз хел еще с этим
Для задачи №1:
Вот что я нешел, мне надо это как-то сложить все в кучу и чтобы получилась норм код, но я не знаю как сделать.
Это вроде на С++, а как на С переделать (тут исп. atoi, lnum
тут типо используем длинную арифметику( http://e-maxx.ru/algo/big_integer )

C
1
2
const int base = 1000*1000*1000*1000; // 12 цифр
typedef vector<int> lnum;
Чтение( используем массив char'ов:
C
1
2
3
4
for (int i=(int)strlen(s); i>0; i-=9) {
    s[i] = 0;
    a.push_back (atoi (i>=9 ? s+i-9 : s));
}
Сложение:
C
1
2
3
4
5
6
7
8
int carry = 0;
for (size_t i=0; i<max(a.size(),b.size()) || carry; ++i) {
    if (i == a.size())
        a.push_back (0);
    a[i] += carry + (i < b.size() ? b[i] : 0);
    carry = a[i] >= base;
    if (carry)  a[i] -= base;
}
Вывод :
C
1
2
3
printf ("%d", a.empty() ? 0 : a.back());
for (int i=(int)a.size()-2; i>=0; --i)
    printf ("%09d", a[i]);
0
easybudda
Модератор
Эксперт CЭксперт С++
9663 / 5613 / 952
Регистрация: 25.07.2009
Сообщений: 10,776
21.04.2010, 20:09 #12
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
1. Выглядит мрачновато, но работает
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
51
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAX_NUM 32
 
char *chrsum(const char *a, const char *b){
    static char buf[MAX_NUM];
    const char *pa, *pb;
    char  *pBuf;
    int over, sum;
 
    memset(buf, 0, sizeof(buf));
    pa = a + strlen(a) - 1;
    pb = b + strlen(b) - 1;
    pBuf = buf + sizeof(buf) - 2;
    over = 0;
    while ( pBuf >= buf ){
        sum = over + ( pa < a ? 0 : (*pa-- - '0') ) + ( pb < b ? 0 : (*pb-- - '0') );
        if ( !sum )
            break;
        over = sum / 10;
        sum = sum % 10 + '0';
        *pBuf-- = sum;
    }
 
    return ++pBuf;
}
 
int main(void){
    char a[MAX_NUM], b[MAX_NUM], *p;
 
    while ( 1 ){
        printf("A = ");
        if ( !fgets(a, MAX_NUM, stdin) )
            exit(1);
        if ( p = strrchr(a, '\n') )
            *p = '\0';
        if ( !*a )
            break;
        printf("B = ");
        if ( !fgets(b, MAX_NUM, stdin) )
            exit(1);
        if ( p = strrchr(b, '\n') )
            *p = '\0';
        if ( !*b )
            break;
        printf("A + B = %s\n", chrsum(a, b));
    }
    exit(0);
}
Для выхода просто enter нажать...
1
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
21.04.2010, 22:37  [ТС] #13
а не могли бы Вы по хлду задачи объяснить ?
C
1
2
3
4
5
    memset(buf, 0, sizeof(buf));
    pa = a + strlen(a) - 1;
    pb = b + strlen(b) - 1;
    pBuf = buf + sizeof(buf) - 2;
        over = 0;
C
1
(*pa-- - '0')
C
1
if ( !fgets(a, MAX_NUM, stdin) )
C
1
if ( p = strrchr(a, '\n') )
Огромное спасибо!!!

Добавлено через 1 минуту
1) вообще по ходу
2) тоже
3) !fgets, stdin
4) strrchr

Добавлено через 2 часа 14 минут
кто-нибудб может для задания 2 переделать код, который я выше вылаживал ? ПЛЗ
0
easybudda
Модератор
Эксперт CЭксперт С++
9663 / 5613 / 952
Регистрация: 25.07.2009
Сообщений: 10,776
21.04.2010, 23:30 #14
Цитата Сообщение от Лестат Посмотреть сообщение
а не могли бы Вы по хлду задачи объяснить ?
В двух словах: создаются три указателя и устанавливаются соответственно на последний символ строк a, b и на предпоследний статического буфера (последний - 0). memset() обнуляет буфер, хотя оно тут и не обязательно, можно и убрать, только в буфере последний символ в ноль установить. Заводится переменная over, в которую выносится то, что в один разряд при сложении не поместилось. Ну а дальше берутся значения указателей, если те ещё за левый предел строк не вылезли, складываются со значением over, к остатку от деления на 10 прибавляется '0', чтобы получилось текстовое представление цифры и вставляется в буфер, а частное от деления в over заносится...
fgets и strrchr - библиотечные функции, а stdin - стандартный поток ввода...
1
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
22.04.2010, 10:10  [ТС] #15
люди, може кто-нибудь насчет 2-й задачи что-то подсказать или изменить код, которыя я раньше выкладывал тут ???
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2010, 10:10
Привет! Вот еще темы с ответами:

В строке между словами вставить вместо пробела запятую и пробел - C++
скажите, в чем ошибка В строке между словами вставить вместо пробела запятую и пробел. #include &lt;stdafx.h&gt; #include &lt;iostream&gt; ...

В строке между словами вставить вместо пробела запятую и пробел - C++
В строке между словами вставить вместо пробела запятую и пробел.вывести все слова, начинающиеся на букву Z. Добавлено через 13 минут ...

Азбука Морзе, добавить пробел между словами при декодировании - C++
Написал &quot;программу&quot; для перевода кода Морзе на Английский и наоборот, но никак не могу понять как сделать чтобы между словами ставился...

В строке между словами вставить вместо пробела запятую и пробел - C++
как в строке между словами вставить вместо пробела запятую и пробел? Добавлено через 2 минуты на с++.


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

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

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