Другие языки программирования и технологии

Дана строка, состоящая из слов, разделенных символами, которые перечислены во второй строке. Показать все слова На С++

Дана строка, состоящая из слов, разделенных символами, которые перечислены во второй строке. Показать все слова. На С++
Глеб Гусев
Глеб Гусев
87
#include <iostream>
#include <string>
#include <regex>
#include <vector>
using namespace std;
vector<string> words(const string& str, const string& signs) {
const regex re{ signs };
const sregex_token_iterator iter{ str.begin(), str.end(), re, -1 };
return { iter, {} };
}
int main() {
const string str("One two,three.four-five;six:seven!eight,nine-ten");
const string re(R"([ ,.;:!?-]+)");
auto result = words(str, re);
for (const auto &word : result) cout << word << '\n';
cout.put('\n');
system("pause");
}
Алия Назарова
Алия Назарова
73 526
Лучший ответ
#include < iostream >
#include < string >
#include < cstdlib >
#include < windows.h >

using namespace std;

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
system("color 0A");
string str, sep;
cout << "Введите строку для анализа" << endl;
getline(cin, str);
cout << "Введите строку разделителей ";
getline(cin, sep);
string ss;
unsigned i = 1;
for (unsigned u = 0; u < str.size(); ++u)
{
bool b = false;
for (char sp : sep)
{
if (str[u] == sp)
{
b = true;
break;
}
}
if (b)
{
cout << i << " слово " << ss << endl;
ss = "";
++i;
}
else
{
ss += str[u];
}
if (u == str.size() - 1)
{
cout << i << " слово " << ss << endl;
ss = "";
}
}
cin.get(); cin.get();
return 0;
}
Levani Archvadze
Levani Archvadze
8 552
Levani Archvadze В 31 и в 41 строке в if() добавить && ss.size() != 0
Я хотел добавить, да написано, что время редактирования ответа истекло.
Levani Archvadze #include < iostream >
#include < string >
#include < cstdlib >
#include < windows.h >

using namespace std;

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
system("color 0A");
string str, sep;
cout << "Введите строку для анализа" << endl;
getline(cin, str);
cout << "Введите строку разделителей ";
getline(cin, sep);
string ss;
unsigned i = 1;
for (unsigned u = 0; u < str.size(); ++u)
{
bool b = false;
for (char sp : sep)
{
if (str[u] == sp)
{
b = true;
break;
}
}
if (b && ss.size() != 0)
{
cout << i << " слово " << ss << endl;
ss = "";
++i;
}
else
{
ss += str[u];
}
if (u == str.size() - 1 && ss.size() != 0)
{
cout << i << " слово " << ss << endl;
ss = "";
}
}
cin.get(); cin.get();
return 0;
}
separators - строка с разделителями
source - строка со словами
#include //для работы со строками
define SIZE 100

char **words;
for(int i = 0; i < SIZE; i++)
words[i] = new char[SIZE];
int length = strlen(source); //длина исходной строки
int sep_count = strlen(separators); //количество символов разделителей
int words_count = 0;
int current_word_len = 0;
for(int i = 0; i < length; i++){
bool check = true;
for(int j = 0; j < sep_count; j++){
if(source[i] == separators[j]){
check = false; break;
}
}
if(check)
words[words_count][current_word_len++] = source[i];
else{
current_word_len = 0;
words_count++;
}
}

я псевдокод набросал, думаю мысль - ясна!
еще можно с помощью strtok сделать!
Игорь Смирнов еще можно с помощью strtok сделать

Похожие вопросы