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

Строки. нужен код для соритровки символов - C++

Восстановить пароль Регистрация
 
Dima7147
0 / 0 / 0
Регистрация: 17.11.2011
Сообщений: 17
21.11.2011, 16:10     Строки. нужен код для соритровки символов #1
При написании программ использовать нуль–терминированные строки и работать только с типом char *. Длина каждой строки не превосходит 300 символов. Словом, входящим в состав строки, назовѐм непрерывную последовательность символов, ограниченную символами–разделителями, началом и концом строки. Символы, относящиеся к разделителям, определяет пользователь, если иное не сказано в условии задачи. Если решить задачу невозможно, программа должна выдать соответствующее сообщение.

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

Добавлено через 3 минуты
помогите пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2011, 16:10     Строки. нужен код для соритровки символов
Посмотрите здесь:

Выделение памяти для строки символов C++
C++ Удалить конец строки символов. Ввести кол-во удаляемых символов , вывести результат ,String ,задачка,С++
C++ Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки.
C++ Нужен правильный код для BORLAND c++ пожалуйста
Написать собственный класс для ввода и вывода строки, подсчета количества символов в строке C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
21.11.2011, 17:19     Строки. нужен код для соритровки символов #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
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
#include <stdio.h>
#include <string.h>
 
#define DELIM  " .,:;!?\n\t"
#define MAXLINE  1000
#define MAXWORDS  100
 
void extract_words(char *s, char **w, int nw, char *delim)
{
    for (*w = strtok(s, delim);
        *w++ != NULL && --nw > 0;
        *w = strtok(NULL, delim))
        ;
}
 
int mystrcmp(char *s, char *t)
{
    for ( ; *s && *s == *t; s++, t++)
        ;
    return (*s == '\0' && *t == '\0') ? 0 : *s - *t;
}
 
char *merge_words(char *s, char **w1, char **w2,
    int (*cmp)(char *, char *))
{
    char **p;
 
    *s = '\0';
    while (*w1 != NULL && *w2 != NULL) {
        if (cmp(*w1, *w2) < 0)
            strcat(s, *w1++);
        else 
            strcat(s, *w2++);
        strcat(s, " ");
    }
    for (p = (*w1 == NULL) ? w2 : w1; *p != NULL; p++) {
        strcat(s, *p);
        strcat(s, " ");
    }
    return s;
}
 
int main()
{
    char str1[MAXLINE], str2[MAXLINE];
    char *words1[MAXWORDS], *words2[MAXWORDS];
    char s[MAXLINE + MAXLINE];
    
    while (printf("\nenter a first line:\n") > 0 
        && fgets(str1, MAXLINE, stdin) && *str1 != '\n'
        && printf("\nenter a second line:\n") > 0 
        && fgets(str2, MAXLINE, stdin) && *str2 != '\n') {
 
            extract_words(str1, words1, MAXWORDS, DELIM);
            extract_words(str2, words2, MAXWORDS, DELIM);
 
            printf("\nresult:\n%s\n",
                                merge_words(s, words1, words2, mystrcmp));
    }
    return 0;
}
Dima7147
0 / 0 / 0
Регистрация: 17.11.2011
Сообщений: 17
21.11.2011, 20:27  [ТС]     Строки. нужен код для соритровки символов #3
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
#include <iostream>
using namespace std;
int main()
{
    char a[256], b[256], s[256];
    gets(a);
    gets(b);
    int i = 0, j = 0, q = 0;
    while (i < strlen(a) && j < strlen(b))
    {
        while (!((a[i] > 64 && a[i] < 91) || (a[i] > 96 && a[i] < 123)))
            i++;
        while (!((b[j] > 64 && b[j] < 91) || (b[j] > 96 && b[j] < 123)))
            j++;
        if ((a[i] > b[j]) && ((a[i] > 64 && a[i] < 91) || (a[i] > 96 && a[i] < 123)) && ((b[j] > 64 && b[j] < 91) || (b[j] > 96 && b[j] < 123)))
        {
            while ((a[i] > 64 && a[i] < 91) || (a[i] > 96 && a[i] < 123))
            {
                s[q] = a[i];
                q++;
                i++;
            }
            s[q] = ' ';
            q++;
        }
        else 
        {
            while ((b[j] > 64 && b[j] < 91) || (b[j] > 96 && b[j] < 123))
            {
                s[q] = b[j];
                q++;
                j++;
            }
            s[q] = ' ';
            q++;
        }
    }
    if (i = strlen(a))
        while (j < strlen(b))
        {
            bool t = true;
            if ((b[j] > 64 && b[j] < 91) || (b[j] > 96 && b[j] < 123))
            {
                s[q] = b[j];
                q++;
                j++;
            }
            if (!((b[j] > 64 && b[j] < 91) || (b[j] > 96 && b[j] < 123)) && t == false)
            {
                s[q] = ' ';
                q++;
                j++;
                t = true;
            }
            if (!((b[j] > 64 && b[j] < 91) || (b[j] > 96 && b[j] < 123)) && t == true)
                j++;
        }
    else
        while (i < strlen(a))
        {
            bool t = true;
            if ((a[i] > 64 && a[i] < 91) || (a[i] > 96 && a[i] < 123))
            {
                s[q] = a[i];
                q++;
                i++;
            }
            if (!((a[i] > 64 && a[i] < 91) || (a[i] > 96 && a[i] < 123)) && t == false)
            {
                s[q] = ' ';
                q++;
                i++;
                t = true;
            }
            if (!((a[i] > 64 && a[i] < 91) || (a[i] > 96 && a[i] < 123)) && t == true)
                i++;
        }
        cout << s;
        return 0;
}
 Комментарий модератора 
Используйте теги форматирования кода!


вот мой вариант но не могу найти ошибку... отредактируйте плиз кто сможет))
просто тот код я немного не понял но в итоге

Пишет:
enter a first line:
15abr46987rbi]f';/sdfbx/s/rgent/

enter a second line:
h;liou0/hj,kn90hmn'd[dp

result:
15abr46987rbi]f' /sdfbx/s/rgent/ h liou0/hj kn90hmn'd[dp

,а должно на выходе выдавать только цифры...заменяя остальные символы пробелом ну т.е. вместо (a325b) должно будет выдать (a b)
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
22.11.2011, 14:18     Строки. нужен код для соритровки символов #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
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
#include <stdio.h>
#include <string.h>
#include <limits.h>
#include <ctype.h>
 
#define MAXLINE  1000
#define MAXWORDS  100
 
char *get_delims(char *s)
{
    int c;
 
    for (c = 1; c <= UCHAR_MAX; c++)
        if (! isalpha(c))
            *s++ = c;
    *s = '\0';
    return s;
}
 
void extract_words(char *s, char **w, int nw, char *delim)
{
        for (*w = strtok(s, delim);
                *w++ != NULL && --nw > 0;
                *w = strtok(NULL, delim))
                ;
}
 
int mystrcmp(char *s, char *t)
{
        for ( ; *s && *s == *t; s++, t++)
                ;
        return (*s == '\0' && *t == '\0') ? 0 : *s - *t;
}
 
char *merge_words(char *s, char **w1, char **w2,
        int (*cmp)(char *, char *))
{
        char **p;
 
        *s = '\0';
        while (*w1 != NULL && *w2 != NULL) {
                if (cmp(*w1, *w2) < 0)
                        strcat(s, *w1++);
                else 
                        strcat(s, *w2++);
                strcat(s, " ");
        }
        for (p = (*w1 == NULL) ? w2 : w1; *p != NULL; p++) {
                strcat(s, *p);
                strcat(s, " ");
        }
        return s;
}
 
int main()
{
        char str1[MAXLINE], str2[MAXLINE];
        char *words1[MAXWORDS], *words2[MAXWORDS];
        char s[MAXLINE + MAXLINE];
    char delims[UCHAR_MAX];
 
    get_delims(delims);  
        while (printf("\nenter a first line:\n") > 0 
                && fgets(str1, MAXLINE, stdin) && *str1 != '\n'
                && printf("\nenter a second line:\n") > 0 
                && fgets(str2, MAXLINE, stdin) && *str2 != '\n') {
 
                        extract_words(str1, words1, MAXWORDS, delims);
                        extract_words(str2, words2, MAXWORDS, delims);
 
                        printf("\nresult:\n%s\n",
                                merge_words(s, words1, words2, mystrcmp));
        }
        return 0;
}
Dima7147
0 / 0 / 0
Регистрация: 17.11.2011
Сообщений: 17
22.11.2011, 23:09  [ТС]     Строки. нужен код для соритровки символов #5
нет не работает все то же самое
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
22.11.2011, 23:11     Строки. нужен код для соритровки символов #6
Цитата Сообщение от Dima7147 Посмотреть сообщение
нет не работает все то же самое
пример?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.11.2011, 23:11     Строки. нужен код для соритровки символов #7
Цитата Сообщение от Dima7147 Посмотреть сообщение
нет не работает все то же самое
что конкретно не работает или работает не так? какие ошибки?
Dima7147
0 / 0 / 0
Регистрация: 17.11.2011
Сообщений: 17
22.11.2011, 23:27  [ТС]     Строки. нужен код для соритровки символов #8
enter a first line:
a/c/d/f/

enter a second line
b/a/e/d

result:
a b a c d e d f

А должно выводить: a a b c d d e f
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
22.11.2011, 23:28     Строки. нужен код для соритровки символов #9
Цитата Сообщение от Dima7147 Посмотреть сообщение
enter a first line:
a/c/d/f/
enter a second line
b/a/e/d
result:
a b a c d e d f
А должно выводить: a a b c d d e f
вы сами себе противоречите
Цитата Сообщение от Dima7147 Посмотреть сообщение
Слова в каждой из двух исходных строк упорядочены по алфавиту
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2011, 00:02     Строки. нужен код для соритровки символов
Еще ссылки по теме:

Разработать программу, которая для заданной строки s выводит на экран последовательность символов, расположенн C++
Код для нахождения определителя матрицы N на N исключением строки и столбца C++
C++ Получить из строк новую строку, содержащюю первые N1 символов строки S1 и последнии N2 символов строки S2

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

Или воспользуйтесь поиском по форуму:
Dima7147
0 / 0 / 0
Регистрация: 17.11.2011
Сообщений: 17
23.11.2011, 00:02  [ТС]     Строки. нужен код для соритровки символов #10
прошу прощения, осмотрелся. все верно, спасибо огромное за помощь
Yandex
Объявления
23.11.2011, 00:02     Строки. нужен код для соритровки символов
Ответ Создать тему
Опции темы

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