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

Тема в разделе "C/C++/C#", создана пользователем User24, 18 янв 2011.

  1. User24

    User24 Гость

    Репутация:
    0
    Помогите написать программу удаления четных\нечетных слов в предложении. Или подскажите алгоритм.
     
  2. romanriddick

    romanriddick Гость

    Репутация:
    0
    алгоритм очень прост , нужно записать в один масив места (координаты) пробелов, а в другой двумерный масив слова между пробелами ... потом на запрос "какие слова отобразить ???" вывести четные или нечетные слова...
     
  3. User24

    User24 Гость

    Репутация:
    0
    Спасибо, за что откликнулись. Вообще надо сделать для четных, но так, чтобы программист мог быстро исправить для нечетных.
     
  4. romanriddick

    romanriddick Гость

    Репутация:
    0
    так ето ведь не проблема ... если і - индекс , и і при деление на 2 дает остачу 0 , значит число четное !!!
    для нечетных наоборот
     
  5. User24

    User24 Гость

    Репутация:
    0
    ну так получается что и для нечетных не проблема, если остаток от деления =1, основная проблема в том что я нуб в программировании, и плохо представлюю себе структуру программы, не понимаю почему второй массив должен быть двухмерным...
     
  6. romanriddick

    romanriddick Гость

    Репутация:
    0
    a[1][1]="asdasd"
    a[1][2]="sdsd"
    .......
    a[j]="...."
    Где i - индекс речення ... j- индекс слова в реченни ...
    можна зделать и одномерным массивом ... но так нагляднее и роботы не так уж и много лишней...
    кроме того препода "сразите" такой задумкой...)))
    я всегда так делаю , хотя можно и один индекс использовать

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

    Добавлено: чуть не забыл .... очень важно!!!
    если в тексте будут "ентеры" то использование двумерного массива обезательное!!!
     
  7. User24

    User24 Гость

    Репутация:
    0
    Препода я уже так сразил, что лучше сделать как-нибудь попроще, тем более что предложение будет одно: Мама мыла раму. Можешь на простом языке рассказать последовательность программы? я все-таки наверное буду предерживатся идеи одномерного массива.
     
  8. romanriddick

    romanriddick Гость

    Репутация:
    0
    начало проги
    открываем файл
    s-переменнай типу файла
    присваеваем массиву
    if (!eof(file)) && (s!="")
    a = s;
    I++;

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

    стереть файл , записать в файл новый масив b[j]
     
  9. User24

    User24 Гость

    Репутация:
    0
    #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;}
     
  10. romanriddick

    romanriddick Гость

    Репутация:
    0
    я же не могу вместо вас прогу написать)))
    могу только подсказать что легче будет не с клавы а з файла данные ... дальше по алгоритму
    в етом цыкле
    for(i=0;i<n;i++)
    {if(str==' ')
    j++;}


    должен быть вот етот ряд
    if(j%2==0)
    b[j]=str[j];}
     
  11. IrineK

    IrineK Гость

    Репутация:
    0
    На входе: вводится с консоли предложение (набор слов, разделенных одним и только одним пробелом, заканчивающийся точкой).
    В процессе выполнения на консоль выводится сформированный массив - отдельные слова. Идет запрос, какие из них убрать: если нечетные - жмем 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;
    }
     
  12. Rififi

    Rififi Гость

    Репутация:
    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
     
  13. dreamer

    dreamer Гость

    Репутация:
    0
    IrineK
    Не нужно тут такий фортелей: можно просто сделать однопроходный алгоритм на основе конечного автомата с состояниями {слово|пробел} и {чётное|нечётное}.

    Rififi
    Если я правильно понимаю, человеку нужно всего лишь продемонстрировать... кхм... знание принципов работы со строками. И, кстати, в Вашем алгоритме индекс лишний: можно вместо него сделать булеву переменную.
     
  14. IrineK

    IrineK Гость

    Репутация:
    0
    Код (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;
    }
    Преимущества С++ перед С налицо ;)
     
Загрузка...

Поделиться этой страницей