• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 🚨 29 мая стартует курс «Пентест Active Directory: от теории к практике» от Академии Кодебай

    🔍 Изучите реальные техники атак на инфраструктуру Active Directory: от первоначального доступа до полной компрометации.
    🛠️ Освойте инструменты, такие как BloodHound, Mimikatz, CrackMapExec и другие.
    🧪 Пройдите практические лабораторные работы, имитирующие реальные сценарии атак.
    🧠 Получите знания, которые помогут вам стать востребованным специалистом в области информационной безопасности.

    После старта курса запись открыта еще 10 дней Подробнее о курсе ...

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

Строки C++ помогите написать программу

  • Автор темы Автор темы User24
  • Дата начала Дата начала
U

User24

Помогите написать программу удаления четных\нечетных слов в предложении. Или подскажите алгоритм.
 
алгоритм очень прост , нужно записать в один масив места (координаты) пробелов, а в другой двумерный масив слова между пробелами ... потом на запрос "какие слова отобразить ???" вывести четные или нечетные слова...
 
Спасибо, за что откликнулись. Вообще надо сделать для четных, но так, чтобы программист мог быстро исправить для нечетных.
 
так ето ведь не проблема ... если і - индекс , и і при деление на 2 дает остачу 0 , значит число четное !!!
для нечетных наоборот
 
ну так получается что и для нечетных не проблема, если остаток от деления =1, основная проблема в том что я нуб в программировании, и плохо представлюю себе структуру программы, не понимаю почему второй массив должен быть двухмерным...
 
a[1][1]="asdasd"
a[1][2]="sdsd"
.......
a[j]="...."
Где i - индекс речення ... j- индекс слова в реченни ...
можна зделать и одномерным массивом ... но так нагляднее и роботы не так уж и много лишней...
кроме того препода "сразите" такой задумкой...)))
я всегда так делаю , хотя можно и один индекс использовать

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

Добавлено: чуть не забыл .... очень важно!!!
если в тексте будут "ентеры" то использование двумерного массива обезательное!!!
 
Препода я уже так сразил, что лучше сделать как-нибудь попроще, тем более что предложение будет одно: Мама мыла раму. Можешь на простом языке рассказать последовательность программы? я все-таки наверное буду предерживатся идеи одномерного массива.
 
начало проги
открываем файл
s-переменнай типу файла
присваеваем массиву
if (!eof(file)) && (s!="")
a = s;
I++;

for (j=1;j<=i;j++){
if(j%2==0)
b[j]=a[j]
}

стереть файл , записать в файл новый масив b[j]
 
#include<iostream>
#include<string>
using namespace std;
int main(void)
{char str[100] = "This s is a test.\n";
char b[100];

int i,k,n,j=0,s=1;
n=strlen(str);
for(i=0;i<n;i++)
{if(str==' ') j++;}
for (j=0;j<=i;j++){
if(j%2==0)
b[j]=str[j];}
cout<<b<<endl;
//что у меня всё равно чушь получилась, я тут наверное всю программу переврал
return 0;}
 
я же не могу вместо вас прогу написать)))
могу только подсказать что легче будет не с клавы а з файла данные ... дальше по алгоритму
в етом цыкле
for(i=0;i<n;i++)
{if(str==' ')
j++;}


должен быть вот етот ряд
if(j%2==0)
b[j]=str[j];}
 
На входе: вводится с консоли предложение (набор слов, разделенных одним и только одним пробелом, заканчивающийся точкой).
В процессе выполнения на консоль выводится сформированный массив - отдельные слова. Идет запрос, какие из них убрать: если нечетные - жмем 1, если четные - 2.
На выходе: оставшиеся слова через пробел, в конце - точка.

#include<iostream>
#include <cstring>
using namespace std;

int main()
{
char str[80];
char word[40][80];
int space_pos[40];
int i,j,k;

cout<<"The sentence:\n";
cin.getline(str,80);

int n=0;
while(str[n]!='.') n++;

int m=0;
for(i=0;i<n;i++)
if(str==' ')
{space_pos[m]=i;//позиция пробела
m++;}
space_pos[m]=n;//позиция точки
m++;

//----------формирование массива слов
int begin=0;
int end=space_pos[0];
for(j=0;j<m;j++)
{
for(i=0,k=begin;k<end;k++,i++)
word[j]=str[k];
word[j]='\0';
begin=end+1;
end=space_pos[j+1];
}

for(j=0;j<m;j++)
cout<<word[j]<<endl;

//--------удаление слов по запросу (чет/нечет)
int not_wanted; // 2- для удаления четных слов, 1 - нечетных
char res[80]; //получившееся предложение
char rw[20][80]; //оставшиеся слова

cout<<"\nDelete odd (input 1) or even (input 2) words? ";
cin>>not_wanted;

k=0;
if(not_wanted==2) //оставляем нечетные
{for(j=0;j<m;j++)
if(j%2==0)
{strcpy_s(rw[k],word[j]);
k++;}
}
else if(not_wanted==1)
{for(j=0;j<m;j++) //оставляем четные
if(j%2)
{strcpy_s(rw[k],word[j]);
k++;}
}

strcpy_s(res,rw[0]);
for(i=1;i<k;i++)
{strcat_s(res," ");
strcat_s(res,rw);
}
strcat_s(res,".");

cout<<"\nThe result:\n"<<res<<endl;

return 0;
}
 
User24

Препода я уже так сразил, что лучше сделать как-нибудь попроще

если попроще, то используй Visual Studio 2010 - всё необходимое в уже комплекте.

C++:
#include <locale>
#include <regex>
#include <iostream>

int main()
{
setlocale(LC_ALL, "");

const std::string text = 
"There were three men came out of the west, their fortunes for to try. "
"And these three men made a solemn vow "
"\"John Barleycorn must die\".";

const std::regex rx("\\b\\w+\\b");
const std::sregex_iterator end;

std::cout << "Full text: " << text << std::endl;
std::cout << "Odd words: ";

size_t index = 0;
for (std::sregex_iterator it(text.begin(), text.end(), rx); it != end; ++it, index++)
if (!(index & 1))
std::cout << it->str() << " ";

std::cout << std::endl;

return 0;
}
Вывод программы:
Full text: There were three men came out of the west, their fortunes for to try. And these three men made a solemn vow "John Barleycorn must die".
Even words: There three came of west fortunes to And three made solemn John must
 
IrineK
Не нужно тут такий фортелей: можно просто сделать однопроходный алгоритм на основе конечного автомата с состояниями {слово|пробел} и {чётное|нечётное}.

Rififi
Если я правильно понимаю, человеку нужно всего лишь продемонстрировать... кхм... знание принципов работы со строками. И, кстати, в Вашем алгоритме индекс лишний: можно вместо него сделать булеву переменную.
 
C++:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{	 setlocale(LC_ALL,"");
string str;
string arStr[10];
int N=0,choice;

cout<<"Введите строку. После ввода нажмите Enter, затем - комбинацию Ctrl+Z+Enter"<<endl;
while(cin>>str)
{
arStr[N]=str;
N++;
}
cin.clear();

cout<<"Оставить четные слова - введите ноль. Оставить нечетные - введите единицу"<<endl;
cin>>choice;

str="";
if(choice)
for(int i=0;i<N;i+=2)str+=arStr[i]+" ";
else
for(int i=1;i<N;i+=2)str+=arStr[i]+" ";

cout<<str<<endl;
return 0;
}

Преимущества С++ перед С налицо ;)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!

Курс AD