Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/2: Рейтинг темы: голосов - 2, средняя оценка - 5.00
Hinki
0 / 0 / 0
Регистрация: 03.02.2015
Сообщений: 1
1

Составить новую строку с новыми словами составленными с помощью сложения двух слов

03.02.2015, 11:49. Просмотров 409. Ответов 1
Метки нет (Все метки)

Здравствуйте, нужна помощь в дописании программы, дана строка из n слов, надо составить новую строку с новыми словами составленными с помощью сложения 2х слов, если >=2 букв одного слова = буквам другого слова(asd+sda = asda, asd+fgh+sda = asda), программа работает только с прямой последовательностью слов (т.е. asd + sda = asda), необходимо чтобы она работала с любыми 2мя словами из строки.

(код программы для 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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <stdio.h>
#include <stdlib.h>
int strlen(char x[])
{
    int i;
    for( i = 0 ; x[i] ; i++ );
    return i;
}
 
int IsStr( char c )
{
    if (((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'z')) || ((c >= '0') && (c <= '9')))
        return 1;
    return 0;
}
 
void InOut( void )
{
    char *StrAll;
    int Len = 0;
    char *str, c;
    int n = 0, p;
    printf("Please input string: ");
    str = (char *)malloc(sizeof(char) * 1);
    while (IsStr(c = getchar()))
    {
        str[n] = c, n++;
        str = (char *)realloc(str, n);
    }
 
    str[n] = 0, n++;
 
    StrAll = (char *)malloc(sizeof(char) * n);
    sprintf(StrAll, str);
    Len += n, n = 0;
    for(;;)
    {
        while (IsStr(c = getchar()) == 0)
        if (c == 10)
        {
            printf("%s", StrAll);
            free(StrAll);
            free(str);
 
            return;
        }
 
        str[n] = c, n++;
        while (IsStr(c = getchar()))
        str[n] = c, n++;
 
    str[n] = 0, n++;
 
    if (str[0] == StrAll[Len - 3] && str[1] == StrAll[Len - 2])
    {
        StrAll = (char *)realloc(StrAll, Len + n - 3);
        sprintf(StrAll + Len - 1, str + 2);
        Len += n - 3, n = 0;
    }
    else
    {
        StrAll = (char *)realloc(StrAll, Len + n);
        sprintf(StrAll + Len - 1, " "), Len++;
        sprintf(StrAll + Len - 1, str);
        Len += n - 1, n = 0;
    }
  }
}
 
int main( void )
{
    InOut();
    getch();
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2015, 11:49
Ответы с готовыми решениями:

Составить новую строку из данных слов
Добрый день! Не могу решить задачу;( Дана произвольная строка символов. Подсчитать количество...

Составить новую строку из слов, записанных в обратном порядке
дана произвольная строка символов составить новую строку состоящую из слов записанных в обратном...

Строки. Составить новую строку из слов, в которых не встречается бука «н»
Дана произвольная строка символов. Составить новую строку из слов, в которых не встречается бука...

Найти общие символы двух заданных строк и составить из них новую строку
Помогите написать программу. Две строки разной длины вводятся с экрана. Найти общие символы из...

Из символов двух строк составить новую строку, в которой каждый символ встречается ровно два раза
&gt;Даны две строки. Определите, можно ли из некоторых символов первой строки и всех символов второй...

1
1XPLoade1
30 / 30 / 38
Регистрация: 23.01.2015
Сообщений: 174
04.02.2015, 10:58 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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
 
int main(int argc, char* argv[])
{
    static char str[256] = "\0";
    printf("Enter a string: "); gets(str);
 
    char** sstr = new char*[256];
    memset((void*)sstr, 0x00, sizeof(char*) * 256);
 
    char* word = strtok(str, "+");
    for (int index = 0; word != NULL; index++)
    {
        sstr[index] = new char[256];
        strcpy(sstr[index], word);
 
        word = strtok(NULL, "+");
    }
 
    char* output = new char[256];
    memset((void*)output, 0x00, 256);
 
    for (int index = 0; sstr[index]; index++)
        for (int nindex = index + 1; sstr[nindex]; nindex++)
        {
            char* w1 = sstr[index];
            char* w2 = sstr[nindex];
            for (int r = 0; w2[r] != '\0'; r++)
                if (w2[r] == w1[strlen(w1) - 1])
                {
                    int n1 = strlen(w1)-1, n2 = r;
                    while (n1 >= 0 && n2 >= 0 && w1[n1] == w2[n2])
                    {
                        n1--; n2--;
                    }
 
                    if (abs(r - n2) >= 2)
                    {
                        strcpy(&w1[n1 + 1], w2);
                        strcpy(output, w1);
                    }
                }
        }
 
    printf("output = %s\n", output);
 
    _getch();
 
    return 0;
}
0
Миниатюры
Составить новую строку с новыми словами составленными с помощью сложения двух слов  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2015, 10:58

Сформировать новую строку с 5-символьными словами
Помогите пожалуйста, строки плохо понимаю( Сформировать новую строку, в которую включить такие...

Ввести строку из нескольких слов. Разделитель слов пробел. Удалить лишние пробелы, оставив только один пробел между словами
Ввести строку из нескольких слов. Разделитель слов пробел. Удалить лишние пробелы, оставив только...

Ввести строку и сформировать из инвертированных её слов новую строку
Помогите, пожааалуйста( Нужно составить на языке Паскаль программу, управляющуюся с помощью меню. ...


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

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

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