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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Pakestan228
0 / 0 / 0
Регистрация: 16.11.2013
Сообщений: 28
#1

Из первой строчки убрать слова, которые встречаются во второй - C++

05.01.2014, 01:22. Просмотров 432. Ответов 5
Метки нет (Все метки)

Пользователь вводит с клавиатуры 2 строки. Из первой строчки убрать слова, которые встречаются во второй.
Например:

1:user,internet,soft,it
2:computer,test,soft,c++,user

3:internet,it

Вот что вышло:
C++ (Qt)
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
#include "stdafx.h"
#include "string"
#include "iostream"
#include "istream"
#include "stdio.h"
 
 
 
char* slovo(char* str, int count)   //Выбирает слово из строки
{
    int k=1;
char *strs="Error";
char * pch = strtok (str,","); 
 while (pch != NULL)                         
  {
      if(k==count)
          strs=pch;
            
            pch = strtok (NULL, ",");
 
            k++ ;
 }
 return strs;
    }
 
 
int kolvoslov(char stroka[])    //считает кол-во слов в строке
{
int kolvo=0;
 
for (int i=0;i<strlen(stroka);i++)
{
if(stroka[i]==',')
    kolvo++;
}
return kolvo+1;
}
 
 
 
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
 
//str1,2-исходные строки
char str1[256],str11[256]="",str2[256],str21[256]="",str3[256]="",str4[256];
 
//ввод пользователем 2х строк с клавиатуры(слова в строке разделены знаком ",")
printf("Stroka 1:\n");
cin.getline (str1,256);
printf("Stroka 2:\n");
cin.getline (str2,256);
 
int k1=kolvoslov(str1);
int k2=kolvoslov(str2);
for(int i=0;i<strlen(str1);i++)
str11[i]=str1[i];
for(int i=0;i<strlen(str2);i++)
str21[i]=str2[i];
 
 
int p;
for(int i=0;i<k1;i++)
{
    p=0;
    for(int j=0;j<k2;j++)   //если слово из 1 строки не совпадает со словом из 2й строки, p++
    {
        int cmp=_stricmp(slovo(str11,i),slovo(str21,j));
    for(int e=0;e<strlen(str1);e++)
        str11[e]=str1[e];
    for(int e=0;e<strlen(str2);e++)
        str21[e]=str2[e];
    if(cmp!=0)
        p++;
    }
    if(p==k2)
    {strcat(str3,",");
        strcat(str3,slovo(str11,i));
        for(int e=0;e<strlen(str1);e++)
        str11[e]=str1[e];
        }
}
 
int i=0;
while(str3[i]!='\0')    //убираем первую запятую из строки
{
str4[i]=str3[i+1];
i++;
}
 
cout << "Stroka 3:\n"<<str4;
cin.get();
 
cin.ignore();
return 0;
}
в итоге получается не совсем верная строка... в чем может быть ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2014, 01:22     Из первой строчки убрать слова, которые встречаются во второй
Посмотрите здесь:

Вывести в алфавитном порядке слова, которые присутствуют либо в первой строке, либо во второй, но не в обеих сразу. - C++
Задачка: Даны две строки. Вывести в алфавитном порядке слова, которые присутствуют либо в первой строке, либо во второй, но не в обеих...

Найти элементы, которые есть в первой структуре, но нет во второй - C++
Дано два файла записей типа: название прибора, диапазон, цена. Сформировать новый файл, содержащий записи о тех приборах, которые есть в...

Строки в С++ - вывести слова, которые встречаются один раз - C++
вывести только те слова сообщения,которые встречаются в нем ровно один раз.

Удалить из слова X все буквы, которые встречаются в слове Y - C++
#include &lt;iostream&gt; using namespace std; main() { string x, y; cin &gt;&gt;x; cin &gt;&gt;y;

В тексте найти слова , которые встречаются больше N раз - C++
Введен текст . В этом тексте найти слова , которые встречаються больше N раз . Эти слова записать в отдельный массив . #include...

Как из первой строки удалить те буквы, которые есть во второй строке? - C++
Как из первой строки удалить те буквы, которые есть во второй строке???

Напечатать все слова, которые встречаются в строке по одному разу - C++
Задание такое. Дана строка, напечатать все слова, которые встречаются в ней по одному разу. Код моей программы #include&lt;iostream&gt; ...

Напечатать те слова, которые встречаются в каждом из двух заданных предложений - C++
Напечатать те слова, которые встречаются в каждом из двух заданных предложений. Помогите. Зарание спасибо! Погуглил, много тем,но...

Напечатать все слова, которые встречаются в предложении по одному разу - C++
Доброго времени суток! Помогите, пожалуйста, решить задачу: Дано предложение. Напечатать все слова, которые встречаются в нём по...

Напечатать все слова последовательности, которые встречаются по одному разу - C++
2)Дана последовательность слов. Напечатать все слова последовательности, которые встречаются в ней по одному разу.

Напечатать те слова, которые встречаются в каждом из двух заданных предложений - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;locale&gt; using namespace std; int main() { char *tempSlova1 = new...

Вывод на экран всех слов, которые находятся между первой и второй запятыми - C++
... задачи в Turbo C: 1.Создать программу, которая находит элементы в двумерном массиве, какие больше среднего арифметического элементов...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sentike
4 / 4 / 0
Регистрация: 22.08.2013
Сообщений: 49
05.01.2014, 04:34     Из первой строчки убрать слова, которые встречаются во второй #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
#include "stdafx.h"
#include <stdio.h>
#include <cstdio>
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
using namespace std;
 
 
vector<string> lOne;
vector<string> lTwo;
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::string var;
    string buf; // Have a buffer string
    stringstream ss; // Insert the string into a stream
 
    cout << "Enter line 1:" << endl;
    //--------------------------------------------------
    std::getline (std::cin, var);
    ss = stringstream(var);
    while (ss >> buf)
        lOne.push_back(buf);
    //--------------------------------------------------
    cout << "Enter line 2:" << endl;
    std::getline (std::cin, var);
    ss = stringstream(var);
    while (ss >> buf)
        lTwo.push_back(buf);
    //--------------------------------------------------
    for (unsigned i = 0; i < lTwo.size(); ++i) 
    {
        auto it = find(lOne.begin(), lOne.end(), lTwo.at( i ));
        if(it != lOne.end())        lOne.erase(it);
    }
 
    std::string str;
    for (unsigned j = 0; j < lOne.size(); ++j) 
    {
        str.insert(str.size(), lOne.at(j));
        str.insert(str.size(), " ");
    }
 
    cout << str << endl;
    cin.get();
    return 0;
}
Pakestan228
0 / 0 / 0
Регистрация: 16.11.2013
Сообщений: 28
05.01.2014, 14:23  [ТС]     Из первой строчки убрать слова, которые встречаются во второй #3
просто выводит исходную строку(
sentike
4 / 4 / 0
Регистрация: 22.08.2013
Сообщений: 49
05.01.2014, 16:15     Из первой строчки убрать слова, которые встречаются во второй #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
#include "stdafx.h"
#include <stdio.h>
#include <cstdio>
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
using namespace std;
 
vector<string> lOne;
vector<string> lTwo;
 
 
std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
    std::stringstream ss(s);
    std::string item;
    while (std::getline(ss, item, delim)) {
        elems.push_back(item);
    }
    return elems;
}
 
 
std::vector<std::string> split(const std::string &s, char delim) {
    std::vector<std::string> elems;
    split(s, delim, elems);
    return elems;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::string var;
    string buf; // Have a buffer string
    stringstream ss; // Insert the string into a stream
 
    cout << "Enter line 1:" << endl;
    //--------------------------------------------------
    std::getline (std::cin, var);
    lOne = split(var, ',');
    //--------------------------------------------------
    cout << "Enter line 2:" << endl;
    std::getline (std::cin, var);
    lTwo = split(var, ',');
    //--------------------------------------------------
    for (unsigned i = 0; i < lTwo.size(); ++i) 
    {
        auto it = find(lOne.begin(), lOne.end(), lTwo.at( i ));
        if(it != lOne.end())        lOne.erase(it);
    }
 
    std::string str;
    for (unsigned j = 0; j < lOne.size(); ++j) 
    {
        str.insert(str.size(), lOne.at(j));
        str.insert(str.size(), ",");
    }
 
    cout << str << endl;
    cin.get();
    return 0;
}
Петррр
5942 / 3379 / 336
Регистрация: 28.10.2010
Сообщений: 5,926
05.01.2014, 16:26     Из первой строчки убрать слова, которые встречаются во второй #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
#include <algorithm>
#include <vector>
#include <sstream>
#include <string>
#include <iostream>
 
std::vector<std::string> words(const std::string& str, const char separator)
{
    std::istringstream iss(str);
    std::vector<std::string> vec;
    std::string word;
    while (std::getline(iss, word, separator))
        vec.push_back(word);
    return vec;
}
 
int main()
{
    std::string s1("user,internet,soft,it");
    std::string s2("computer,test,soft,c++,user");
    std::vector<std::string> vec1 = words(s1, ',');
    std::vector<std::string> vec2 = words(s2, ',');
    std::sort(vec1.begin(), vec1.end());
    std::sort(vec2.begin(), vec2.end());
    std::vector<std::string> result;
    std::set_difference(
        vec1.cbegin(), vec1.cend(),
        vec2.cbegin(), vec2.cend(),
        std::back_inserter(result));
    for (std::vector<std::string>::const_iterator it = result.cbegin();
        it != result.cend();
        ++it)
    {
        std::cout << *it << std::endl;
    }
    return 0;
}
Pakestan228
0 / 0 / 0
Регистрация: 16.11.2013
Сообщений: 28
05.01.2014, 16:44  [ТС]     Из первой строчки убрать слова, которые встречаются во второй #6
Цитата Сообщение от sentike Посмотреть сообщение
Забыл, что в качестве разделитя используется ,(запятая). В моем варианте -- пробел.
Сейчас исправлю

*Исправил, попробуй.
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 "stdafx.h"
#include <stdio.h>
#include <cstdio>
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
using namespace std;
 
vector<string> lOne;
vector<string> lTwo;
 
 
std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
    std::stringstream ss(s);
    std::string item;
    while (std::getline(ss, item, delim)) {
        elems.push_back(item);
    }
    return elems;
}
 
 
std::vector<std::string> split(const std::string &s, char delim) {
    std::vector<std::string> elems;
    split(s, delim, elems);
    return elems;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::string var;
    string buf; // Have a buffer string
    stringstream ss; // Insert the string into a stream
 
    cout << "Enter line 1:" << endl;
    //--------------------------------------------------
    std::getline (std::cin, var);
    lOne = split(var, ',');
    //--------------------------------------------------
    cout << "Enter line 2:" << endl;
    std::getline (std::cin, var);
    lTwo = split(var, ',');
    //--------------------------------------------------
    for (unsigned i = 0; i < lTwo.size(); ++i) 
    {
        auto it = find(lOne.begin(), lOne.end(), lTwo.at( i ));
        if(it != lOne.end())        lOne.erase(it);
    }
 
    std::string str;
    for (unsigned j = 0; j < lOne.size(); ++j) 
    {
        str.insert(str.size(), lOne.at(j));
        str.insert(str.size(), ",");
    }
 
    cout << str << endl;
    cin.get();
    return 0;
}
спасибо, а как сделать, чтобы регистр не учитывался?
Yandex
Объявления
05.01.2014, 16:44     Из первой строчки убрать слова, которые встречаются во второй
Ответ Создать тему
Опции темы

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