Страница 1 из 1

Удаление всех слов, кроме первого

Добавлено: 05 дек 2014, 20:54
olya1994
Всем привет,такая проблема,не работает в программе 1 функция,2-3 работают вроде..Помогите Пожалуйста исправить код или как сделать легче или попроще..заранее большое спасибо!

Задание:
Следующие задания оформить в виде функций. Отдельно разработать демонстрационную программу для демонстрации работоспособности функций.
а. возвратить строку, которая содержит первое и второе слово, если строка содержит более двух слов или исходную строку без изменения.
б. удалить последнее слово из заданной строки.
в. удвоить все пробелы в заданной строке.

Сам Код:

Код: Выделить всё

#include <cstring>
#include <string>
#include <iostream>
#include <conio.h>
using namespace std;
//Удаляет все слова короме первого в введенной строке
string DeleteWord(char s[])
{
   char psz[255];
   strcpy(psz,s);
   for (int i = 0; psz[i] != 0; i++)
        if (psz[i] == '.' || psz[i] == '?' || psz[i] == '!')
        {
            int pos = i;
            while ((psz[pos] != ' ') && (pos >= 0)) pos--;
            for (int n = pos; psz[n] != '\0'; n++)
                psz[n] = psz[n+(i-pos)];
        }
  return psz;
}

// удаляет первое слово строки со всеми пробелами.
string DeleteSpace(char s[])
{
    int i, j, k, len, cnt = 0;
    char *ptr, c;
   
    len = strlen(s);
    if(s[0] != 0 && s[0] != ' ')
        cnt = 1;

    for(i = 0; i < len && cnt < 2; i++)
        if(s[i] == ' ' && s[i+1] != ' ')
            ++cnt;
    for(j = k = i; k < len; ++k)
    {
        c = s[k];
        if(c != ' ')
            s[j++] = c;
    }
    s[j] = 0;
    return &s[i];
}

// является ли данное слово перевертышем 
bool Palindrom(char s[])
{
    if (s[0] + s[1] + s[2] == s[3] + s[4] + s[5]) return true; else return false;

}

int main()
{
   char s[255];
   cout << "Enter string: ";
   gets(s);
   cout << "Deleted ! the first word: " << DeleteWord(s)<<endl;
   cout << "Deleted the first word and all space: " << DeleteSpace(s)<<endl;;
   cout << "Palindrom boolean: "<<Palindrom(s)<<endl;  
   _getch();
}

Re: Удаление всех слов, кроме первого

Добавлено: 11 дек 2014, 12:10
Romeo
Если я правильно понял описание функции по сделанному перед ней комментарию, то она должна удалаять из строки все слова, кроме первого. Честно пытался разобраться в идее алгоритма, но добравшись до самого глубокого уровня вложенности, три раза успел забыть с чего всё начиналось :) Зачем неоходим такой сложный подход? Неужели нельзя сделать проще?

1. Бежим по строке, пока не найдём конец первого слова. Внешний цикл и условие для этого уже есть. Едиственное, я бы добавил в условие ещё проверку на пробел, так как он тоже является концом слова.

2. Найденый граничащий символ заменяем терминирующим нулём и выходим из цикла.

Больше ничего делать не нужно.