С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 16.11.2013
Сообщений: 28
1

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

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

Author24 — интернет-сервис помощи студентам
Пользователь вводит с клавиатуры 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;
}
в итоге получается не совсем верная строка... в чем может быть ошибка?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.01.2014, 01:22
Ответы с готовыми решениями:

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

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

Вывести на экран в обратном порядке русские буквы, которые встречаются в первой строке и не встречаются во второй строке
Даны 2 строки. Вывести на экран в обратном порядке русские буквы, которые встречаются в первой...

Удалить из первой строки символы, которые встречаются во второй строке
Помогите, пожалуйста, составить программу: Удалить из первой строки символы, которые встречаются...

5
4 / 4 / 1
Регистрация: 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;
}
0
0 / 0 / 1
Регистрация: 16.11.2013
Сообщений: 28
05.01.2014, 14:23  [ТС] 3
просто выводит исходную строку(
0
4 / 4 / 1
Регистрация: 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;
}
1
6287 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
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;
}
1
0 / 0 / 1
Регистрация: 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;
}
спасибо, а как сделать, чтобы регистр не учитывался?
0
05.01.2014, 16:44
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.01.2014, 16:44
Помогаю со студенческими работами здесь

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

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

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

Удалите из второй строки все символы, которые встречаются в первой строке, и поместите их в третью строку
заранее большое спасибо!


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Как написать микросервис на Go/Golang
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C#
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru