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

Обработка строк - C++

Восстановить пароль Регистрация
 
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
15.06.2011, 23:07     Обработка строк #1
Всем привет!!!Помогите пожалуйста в решении этой задачи!!!!!


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

Добавлено через 1 час 19 минут
Плиззз!!если есть минутка, помогите пожалуйста!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2011, 23:07     Обработка строк
Посмотрите здесь:

C++ Обработка строк
C++ Обработка строк
C++ обработка строк.
C++ обработка строк
Обработка строк C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
16.06.2011, 00:56     Обработка строк #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
#include <stdio.h>
#include <conio.h>
#include <cstring>
#include <cstdio>
 
int f(char *s1, char *s2) {
    int l1, l2;
    int sz, i;
    char *p1, *p2;
    l1 = strlen(s1);
    l2 = strlen(s2);
    if (l1 > l2)
        sz = l2;
    else
        sz = l1;
    p1 = s1;
    p2 = s2;
    for (i = 0; i < sz; i++) {
        if (*p1 != *p2) break;
        p1++;
        p2++;
    }
    return (i+1);
}
 
const int count = 8;
 
char *text[count] = {
    "wows",
    "wlsn",
    "grom",
    "slon",
    "hosn",
    "jojo",
    "ojoj",
    "jo27"
};
 
int main() {
    int x, y, z;
    int min;
    min = 0;
    for (x = 0; x < count; x++)
        printf("%s\n", text[x]);
 
    for (x = 0; x < count-1; x++) {
      for (y = x+1; y < count; y++) {
          z = f(text[x], text[y]);
          if (z > min) min = z;
      }
    }
    printf("minimum: %d", min);
    return 0;
}
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
16.06.2011, 01:05  [ТС]     Обработка строк #3
Мххх!!Вопрос?Причем тут матрица???О_о.....
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
16.06.2011, 01:41     Обработка строк #4
Цитата Сообщение от сержи Посмотреть сообщение
Всем привет!!!Помогите пожалуйста в решении этой задачи!!!!!


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

Добавлено через 1 час 19 минут
Плиззз!!если есть минутка, помогите пожалуйста!!!
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
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <iostream>
 
int f(char *p1, char *p2) {
    int l1, l2;
    l1 = strlen(p1);
    l2 = strlen(p2);
    if (l1 > l2) l1 = l2;
    l2 = 0;
    while ((*p1 == *p2) && (l2 != l1)) l2++;
    return l2+1;
}
 
char *text[30]; // резерв на 30 слов
 
int main() {
    int x, y, z;
    int count = 0;
    int min = 0;
    char buf[1000]; // текст до 999 символов
    char tmp[100];  // 1 слово до 99 симв
    char *p1, *p2;
    printf("Enter text: ");
    scanf("%[A-Z a-z0-9]", buf);
    p1 = buf;
    // разбиваем на слова на
    for (;;) {
        while ((*p1) && !isalnum(*p1)) p1++;
        if (!(*p1)) break;
        p2 = tmp;
        while (*p1 && isalnum(*p1)) {
            *p2 = *p1;
            p2++;
            p1++;
        }
        *p2 = '\0';
        z = strlen(tmp)+1;
        text[count] = new char[z];
        strcpy(text[count], tmp);
        count++;
    }
 
    for (x = 0; x < count; x++)
        printf("%2d: %s\n", x+1, text[x]);
 
    if (count < 2) return 0;
 
    for (x = 0; x < count-1; x++) {
      for (y = x+1; y < count; y++) {
          z = f(text[x], text[y]);
          if (z > min) min = z;
      }
    }
 
    for (x = 0; x < count; x++)
        delete [] text[x];
 
    printf("minimum: %d\n", min);
    return 0;
}
Запусти это и поймешь причем тут и что тут ок?
введи что нибудь вроде Hello world hells goblin goodbye

Не по теме:


нет чтобы спасибо сказать, "при чем здесь матрица?"

сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
16.06.2011, 01:45  [ТС]     Обработка строк #5
ТА неаа!!!прсто то шо ты в 1 раз ответил!!!вот и спросил!!!
Просто там идет матрица , а потом слова и все!!!!!
В том моменте чуток не понял!!!!!
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
16.06.2011, 01:47     Обработка строк #6
Цитата Сообщение от сержи Посмотреть сообщение
ТА неаа!!!прсто то шо ты в 1 раз ответил!!!вот и спросил!!!
Просто там идет матрица , а потом слова и все!!!!!
В том моменте чуток не понял!!!!!
первый раз был черновой вариант, решал такое впервые )

Добавлено через 1 минуту
Ответь хоть, то или не то?

млин ошибка есть... завтра доработаю
хотя нет в 14й строке убрать +1, еще ошибку нужно искать
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
16.06.2011, 01:54  [ТС]     Обработка строк #7
Ну вроде то!!!!водил HELLO Win( для примера)!!!
Пишит:
1.HELLO
2.Win
minimum:1
Вот весь ответ!!!

Добавлено через 4 минуты
Можно еще вопросик!!по этим самым строка!!!!

Вот задача: Разработать алгоритм и программу для разбиения текста на строки длиной не более 50 символов. Перенос слов на новую строку осуществлять на месте пропуска.
Вот код это программы:
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
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    char mas[] = "123456789012 3456789012345678 9012345678901234567890 1234567 890";
    const int p=50;
    int count = 0;    
    int size = strlen(mas); 
 
    for(int i=0; i<size; i++)
    {        
        if(count == p)
        {
           cout << "\n";
           count=0;
        }
        cout << mas[i];
        count++;
    }
    cout << "\n";
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
Но она не коретно работает!!!должна при каждом пропуске переносить слова на новую строку, а она не переносит=(((
Не подскажишь в чем проблема???
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
16.06.2011, 02:15     Обработка строк #8
нет, в моей трабл какойто есть, но пока его не нашел

Добавлено через 10 минут
по твоей
во-первых нет проверки на ПРОБЕЛ а во вторых cout << m[x]; выводит строку начиная с символа m[x]
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
16.06.2011, 02:20  [ТС]     Обработка строк #9
Эххх!!!А что дописать надо??или что удалить еще надо?
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
16.06.2011, 02:42     Обработка строк #10
cout.put(mas[x]); выведет на экран один символ

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
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
 
int main(int argc, char *argv[])
{
    char mas[] = "123456789012 3456789012345678 9012345678901234567890 1234567 890";
    const int p = 51;
    int count = 0;
    int size = strlen(mas);
    /*
    for(int i=0; i<size; i++)
    {
        if(count == p)
        {
           cout << "\n";
           count=0;
        }
        cout << mas[i];
        count++;
    }
 
    */
    char *p1;
    p1 = mas;
 
    while (*p1) {
        if ((*p1 == ' ') || (count == p)) {
            count = 0;
            cout << endl;
        } else {
            cout.put(*p1);
        }
        p1++;
        count++;
    }
    cout << endl;
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
я так понял, чтобы в строку выводились по одному слову макс. длиной в p = 50

Добавлено через 18 минут
Нашел свою ошибку, исправил.. скажу какая будешь ржать ))
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
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <iostream>
 
int f(char *p1, char *p2) {
    int l1, l2;
    l1 = strlen(p1);
    l2 = strlen(p2);
    if (l1 > l2) l1 = l2;
    l2 = 0;
    while ((*p1 == *p2) && (l2 < l1)) {
        p1++;
        p2++;
        l2++;
    }
    return l2+1;
}
 
char *text[30]; // резерв на 30 слов
 
int main() {
    int x, y, z;
    int count = 0;
    int min = 0;
    char buf[1000]; // текст до 999 символов
    char tmp[100];  // 1 слово до 99 симв
    char *p1, *p2;
    printf("Enter text: ");
    scanf("%[A-Z a-z0-9]", buf);
 
    p1 = buf;
    // разбиваем на слова на
    for (;;) {
        while ((*p1) && !isalnum(*p1)) p1++;
        if (!(*p1)) break;
        p2 = tmp;
        while ((*p1) && isalnum(*p1)) {
            *p2 = *p1;
            p2++;
            p1++;
        }
        *p2 = '\0';
        z = strlen(tmp)+1;
        text[count] = new char[z];
        strcpy(text[count], tmp);
        count++;
    }
 
    for (x = 0; x < count; x++)
        printf("%2d: %s\n", x+1, text[x]);
 
    if (count >= 2) {
 
    for (x = 0; x < count-1; x++) {
      for (y = x+1; y < count; y++) {
          z = f(text[x], text[y]);
          if (z > min) min = z;
      }
    }
 
    } // if
 
    for (x = 0; x < count; x++)
        delete [] text[x];
 
    printf("minimum: %d\n", min);
    return 0;
}

Уважаемые Модераторы форума.
Если вас не затруднит то, удалите пожалуйта с этой темы предыдущие сообщения с моим кодом, т.к. он содержит ошибки
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.06.2011, 08:23     Обработка строк #11
Хм... т.е. в тексте hell hello hey hah нужно вывести 14(в hah последняя буква необязательна)?
И какую из 2 задач делать вообще? Что-то я запутался...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2011, 11:38     Обработка строк
Еще ссылки по теме:

C++ Обработка строк
Обработка строк C++
C++ Обработка строк

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

Или воспользуйтесь поиском по форуму:
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
16.06.2011, 11:38     Обработка строк #12
Цитата Сообщение от diagon Посмотреть сообщение
Хм... т.е. в тексте hell hello hey hah нужно вывести 14(в hah последняя буква необязательна)?
И какую из 2 задач делать вообще? Что-то я запутался...
где мой код, можешь ничего не трогать, в последнем все исправлено, а предыдущие уже не имеют значения, а вот что еще нужно ТСу, это к нему )
если есть предложения улучшить код, то впереД!!!
Yandex
Объявления
16.06.2011, 11:38     Обработка строк
Ответ Создать тему
Опции темы

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