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

строки - C++

Восстановить пароль Регистрация
 
Jleloush
 Аватар для Jleloush
1 / 1 / 1
Регистрация: 16.01.2010
Сообщений: 26
23.05.2010, 23:17     строки #1
помогите плз с подходящим материалом или с прогой, а то чет туплю =_=
даны два текста. составить третий который содержит общие слова для первого и второго.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2010, 23:17     строки
Посмотрите здесь:

Добавить в конец первой строки, последние n2-n1 слов второй строки C++
C++ Скопировать второе слово каждой строки в начало следующей строки
C++ Найти номер строки матрицы, наиболее отдаленный от первой строки
C++ Вывести строки файла, после строки добавляя, сколько раз в ней встретилось слово
C++ Определить длину строки,удалить из строки все символы, которые равны заданному
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sura
 Аватар для Sura
6 / 6 / 0
Регистрация: 23.05.2010
Сообщений: 87
24.05.2010, 00:07     строки #2
Можно сделать след. образом:
если эти тексты представлены как массивы с словами-элементами, вот так к примеру
C++
1
char* text[5]={"the","a","one","some","any"};
вместо 5 количество слов в тексте и так же представлен другой.
Тогда создать третий массив и поочередно копировать туда слова с этих массивов, в случайной последовательности,использовав ф-цию rand(),
Mr.X
Эксперт С++
 Аватар для Mr.X
2804 / 1580 / 247
Регистрация: 03.05.2010
Сообщений: 3,677
24.05.2010, 00:45     строки #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
//Даны два текста. Составить третий который содержит общие слова для первого и второго. 
#include <iostream>
#include <string>
#include <locale>
#include <set>
#include <sstream>
#include <algorithm>
#include <vector>
 
std::string  get_obsh_slova
    (
        const std::string& txt1,
        const std::string& txt2
    )
{
    typedef std::set<std::string>  T_word_set;
 
    T_word_set          word_set1;    
    std::istringstream  in_potok1(txt1);
    std::string         cur_word;
    while(in_potok1 >> cur_word)
    {
        word_set1.insert(cur_word);    
    }
 
    T_word_set          word_set2;
    std::istringstream  in_potok2(txt2);
    while(in_potok2 >> cur_word)
    {
        word_set2.insert(cur_word);    
    }
 
    typedef std::vector<std::string>  T_words;
    T_words  obsh_words(word_set1.size() + word_set2.size());
 
    T_words::iterator  new_obsh_words_end 
        = std::set_intersection(word_set1.begin(), word_set1.end(),
                                word_set2.begin(), word_set2.end(),
                                obsh_words.begin());
 
    std::ostringstream  res_potok;
    std::copy(obsh_words.begin(), new_obsh_words_end, 
              std::ostream_iterator<std::string>(res_potok, " "));
 
    return  res_potok.str();   
}
 
int main()
{
    std::string  text1; 
    std::string  text2; 
    std::locale::global(std::locale("rus"));
    for(;;)
    {
        std::cout << "Введите 1-й текст на латинице: " << std::endl;
        getline(std::cin, text1);
 
        std::cout << std::endl
                  << "Введите 2-й текст на латинице: " << std::endl;
        getline(std::cin, text2);
 
        std::cout << std::endl
                  << "Общие слова двух текстов: "
                  << std::endl
                  << get_obsh_slova(text1, text2)
                  << std::endl
                  << std::endl
                  << std::endl
                  << std::endl;
    }
    return 0;
}
Jleloush
 Аватар для Jleloush
1 / 1 / 1
Регистрация: 16.01.2010
Сообщений: 26
24.05.2010, 01:31  [ТС]     строки #4
сори забыл сказать стрингом нельзя пользоваться
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
24.05.2010, 11:22     строки #5
Завалялась такая программка (без использования стандартных функций). Может, чем попожет
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
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
 
const int SIZE =80;
 
void form (char*, char*, char*);
char *probel2 (char *in);
char *probel1 (char *in);
char *copyword (char *, char *, int);
int opr (char *a, char *b, int, int);
void ud(char*, char*);
 
void main()
{
    char buf[SIZE],buf2[SIZE], buf3[SIZE]={' '}, outbuf[SIZE]={' '};
 
    while(cout<<"Vvedite 1 stroky: ",
    cin.getline(buf, SIZE),cout<<"Vvedite 2 stroky: ", cin.getline(buf2, SIZE))
    {   
        ud(buf2, buf3);
        form (buf, buf3, outbuf);
        cout<<"Rezultat: "<<outbuf;
        cout<<endl;
    }
}
void form (char *a,char *b, char *out)
{   
    
    char *first=a; 
    char *first2=b;
    char *z=b;
    int k=0;
    *out='\0';
 
    while (*(first=probel1(a)))
    {
        a=probel2(first);
        b=z;
        while (*(first2=probel1(b)))
        {
            b=probel2(first2);
            k=opr(first, first2, a-first, b-first2);
            if (k>0)
                out=copyword(first2,out,a-first);
        }
    }
    cout<<endl;
}
void ud (char *s, char *b)
{
    char *a=s;
    char *p=b, *z=b; 
    int u=0;
 
    a=probel1(s);
    s=probel2(a);
    b=copyword(a,b,s-a);
 
    char *t=b;
    cout<<endl;
 
    while (*(a=probel1(s)))
    {
        s=probel2(a);
        t=z;
        while (*(p=probel1(t)))
        {
            t=probel2(p);
            u=opr(a,p, s-a, t-p);
 
            if(u==0)
                continue;
            else
                break;
        }
        if (u==0)
            b=copyword(a,b,s-a);    
    }
    cout<<endl;
}
int opr (char *t, char *r, int len, int len2)
{
    int k=0;
    if (len!=len2)
        return 0;
    else
    {
         for (int j=0; j<len; j++)
         {
             if (*t++==*r++)
                k=1;
            else 
            {
                k=0;
                break;
            }
         }
    return k;
     }      
}
char *probel1(char *in)
{ 
    while (*in&&(*in==' ')||(*in=='\t'))
        in++;
    return in;
}
char *probel2 (char *in)
{
    while (*in&&*in!=' '&&*in!='\t')
        in++;
    return in;
}
char *copyword (char * from, char *to, int len)
{
    for (int j=0; (j<len)&&(*to++=*from++); j++)
        ;
    
    *to++=' ';
    *to='\0';
 
    return to;
}
Yandex
Объявления
24.05.2010, 11:22     строки
Ответ Создать тему
Опции темы

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