Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
12 / 1 / 1
Регистрация: 24.09.2009
Сообщений: 188
1

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

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

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

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

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

Добавлено через 13 минут
НА языке Си
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2010, 21:57
Ответы с готовыми решениями:

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

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

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

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

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

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

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

Добавлено через 50 секунд
можно складывать по 6
0
12 / 1 / 1
Регистрация: 24.09.2009
Сообщений: 188
19.04.2010, 22:13  [ТС] 10
кстати да,PointsEqual прав по-моему; на си++ пойдет, если у меня получится переделать. то вообще круто =)
0
12 / 1 / 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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10859 / 6738 / 1618
Регистрация: 25.07.2009
Сообщений: 12,476
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 / 1 / 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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10859 / 6738 / 1618
Регистрация: 25.07.2009
Сообщений: 12,476
21.04.2010, 23:30 14
Цитата Сообщение от Лестат Посмотреть сообщение
а не могли бы Вы по хлду задачи объяснить ?
В двух словах: создаются три указателя и устанавливаются соответственно на последний символ строк a, b и на предпоследний статического буфера (последний - 0). memset() обнуляет буфер, хотя оно тут и не обязательно, можно и убрать, только в буфере последний символ в ноль установить. Заводится переменная over, в которую выносится то, что в один разряд при сложении не поместилось. Ну а дальше берутся значения указателей, если те ещё за левый предел строк не вылезли, складываются со значением over, к остатку от деления на 10 прибавляется '0', чтобы получилось текстовое представление цифры и вставляется в буфер, а частное от деления в over заносится...
fgets и strrchr - библиотечные функции, а stdin - стандартный поток ввода...
1
12 / 1 / 1
Регистрация: 24.09.2009
Сообщений: 188
22.04.2010, 10:10  [ТС] 15
люди, може кто-нибудь насчет 2-й задачи что-то подсказать или изменить код, которыя я раньше выкладывал тут ???
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10859 / 6738 / 1618
Регистрация: 25.07.2009
Сообщений: 12,476
23.04.2010, 11:49 16
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от easybudda Посмотреть сообщение
Выглядит мрачновато, но работает
"Вторая часть Марлезонского балета!" (с)

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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
#define S_END ".!?"
#define SP_CHARS " \t\n"
 
int main(void){
    char buf_in[BUFSIZ], buf_out[BUFSIZ], *p;
    
    printf("Enter some text:\n");
    if ( !fgets(buf_in, BUFSIZ, stdin) || *buf_in == '\n' )
        exit(1);
    
    *buf_out = '\0';
    for ( p = strtok(buf_in, SP_CHARS); p; p = strtok(NULL, SP_CHARS) ){
        strcat(buf_out, p);
        strcat(buf_out, ( strchr(S_END, *(p + strlen(p) - 1)) ) ? "  " : " ");
    }
    
    printf("\nProcessed text:\n%s\n", buf_out);
    
    exit(0);
}
1
Эксперт С++
5037 / 3097 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
23.04.2010, 12:56 17
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Вот, если надо, первая задача - поразрядное сложение... Возможно, не особо круто сделано, все почти тупо в лоб, но зато работает правильно. Изменяя значение N - изменяем максимальное количество разрядов, с которыми можно работать.

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#include <stdio.h>
#include <string.h>
 
#define N 255
 
int get_num(int *mas_num, char number)
{
    if (number == '0')
    {
        *mas_num = 0;
        
        return 0;
    }
    
    if (number == '1')
    {
        *mas_num = 1;
        
        return 0;
    }
    
    if (number == '2')
    {
        *mas_num = 2;
        
        return 0;
    }
    
    if (number == '3')
    {
        *mas_num = 3;
        
        return 0;
    }
    
    if (number == '4')
    {
        *mas_num = 4;
        
        return 0;
    }
    
    if (number == '5')
    {
        *mas_num = 5;
        
        return 0;
    }
    
    if (number == '6')
    {
        *mas_num = 6;
        
        return 0;
    }
    
    if (number == '7')
    {
        *mas_num = 7;
        
        return 0;
    }
    
    if (number == '8')
    {
        *mas_num = 8;
        
        return 0;
    }
    
    if (number == '9')
    {
        *mas_num = 9;
        
        return 0;
    }
    
    return -1;
}
 
int main()
{
    char number1[N];
    int num1[N];
    int len1;
    char number2[N];
    int num2[N];
    int len2;
    int result[N];
    
    int i;
    int n;
    int global_len;
    int older, younger;
    
    FILE *f;
    
    if ((f = fopen("sum.in", "r")) == NULL)
    {
        printf("Read file error!\n");
        exit(1);
    }
    
    fscanf(f, "%s", &number1);
    fscanf(f, "%s", &number2);
    
    fclose(f);
    
    len1 = strlen(number1);
    len2 = strlen(number2);
    
    for (i = len1 - 1, global_len = N - 1; i >= 0; i--, global_len--)
    {
        get_num(&num1[global_len], number1[i]);
    }
    
    for (i = global_len; i >= 0; i--)
    {
        num1[i] = 0;
    }
    
    for (i = len2 - 1, global_len = N - 1; i >= 0; i--, global_len--)
    {
        get_num(&num2[global_len], number2[i]);
    }
    
    for (i = global_len; i >= 0; i--)
    {
        num2[i] = 0;
    }
    
    for (i = N - 1; i >= 0; i--)
    {
        result[i] = num1[i] + num2[i];
    }
    
    for (i = N - 1; i >= 0; i--)
    {
        if (result[i] > 9)
        {
            younger = result[i] % 10;
            older = result[i] / 10;
            result[i] = younger;
            result[i - 1] += older;
        }
    }
    
    if ((f = fopen("sum.out", "w+")) == NULL)
    {
        printf("Write file error!\n");
        exit(1);
    }
    
    for (n = 0; n < N; n++)
    {
        if (result[n] != 0)
        {
            for (i = n; i < N; i++)
            {
                fprintf(f, "%d", result[i]);
            }
            
            return 0;
        }
    }
    
    fprintf(f, "0");
    
    fclose(f);
    
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2010, 12:56

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Добавить пробел между словами
проблема, как добавить в конце проги чтобы было пробела между словами #include &lt;stdafx.h&gt;...

Преобразовать строку так, чтобы между словами был ровно один пробел
Дана строка-предложение с избыточными пробелами между словами. Преобразовать ее так, чтобы между...

Преобразовать строку так, чтобы между словами был ровно один пробел
Дана строка-предложение с избыточными пробелами между словами. Преобразовать ее так, чтобы...

Переобразовать строку так, чтобы между словами был ровно один пробел
Дана строка-предложение с избыточными пробелами между словами.Переобразовать её так, чтобы между...


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

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

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