Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задачка по С++: строки [Help], Удалить лишние пробелы 
V
    Опции темы
margoshka
Дата 25.12.2007, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 24.12.2007

Репутация: нет
Всего: нет



Здравствуйте. Я совсем новичек в программировании. Нужно сделать такое задание на Си++:
заносится строка какого-либо размера, нужно проверить включает ли строка заглавные буквы,  символы или цифры. Потом нужно вывести строку на экран, но без лишних пробелов. И если  есть какой-то сивол кроме строчных букв то сделать так:
допустим строка - "aaa bb 6Е7 kk 9"
тогда нужно написать:
aaa bb 6Е7 kk 
            ***    
 Написать надо разбивая программу на функции, я начала, пробелы лишние удаляет, но не возвращает нужный результат.
помогите, пожалуйста понять, где ошибка:
Код

#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;

//--------------------------------------------------------------------
void check(string str);
void remove_spaces(string str);

//------------------------------------------------------------------------------
int main()
{

    string text;
    do
    {
    getline (cin,text);
    if( text[0] != '\0')    
    check(text);
    }
    while ( text[0] != '\0');
    
    return(EXIT_SUCCESS);
}

//------------------------------------------------------------------------------
void check(string str)
{
    
    remove_spaces(str);
               cout << str << endl;
    //А здесь опять с пробелами    
}

//------------------------------------------------------------------------------
void remove_spaces(string str)
{
    string::size_type pos, end;
    for(pos =0; (pos=str.find(' ',pos)) != string::npos;)
    {
        end = str.find_first_not_of(' ',pos);
        pos++;
        //delete spaces from (end + 1) of the word till the begining of next word
        str.erase(pos, end-pos);
    }
    int END = str.length();
    
    if (str[END-1] == ' ')
    str.erase(END - 1);
     
//Здесь лишние пробелы удалили    
}



PM MAIL   Вверх
zkv
Дата 25.12.2007, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 92



Цитата(margoshka @  25.12.2007,  12:39 Найти цитируемый пост)
void remove_spaces(string str)

по ссылке в твоем случае передавать нужно:
Код

void remove_spaces(string &str)

PM MAIL   Вверх
margoshka
Дата 25.12.2007, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 24.12.2007

Репутация: нет
Всего: нет



Спасибо  
PM MAIL   Вверх
margoshka
Дата 26.12.2007, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 24.12.2007

Репутация: нет
Всего: нет



Ура! Все, сдала. Конечно, скорее всего можно сделать попроще, но пока не умею. Может кому пригодиться:

Код


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

//--------------------prototype------------------------------------------------
void check(string &str);
void remove_spaces(string &str);
bool correct(string &str);
void print_incorrect(string &str);
//------------------------------------------------------------------------------
int main()
{

    string text;
    do
    {
    getline (cin,text);
    if( text[0] != '\0')    
    check(text);
    }
    while (!cin.eof());//resive string till eof
    
    
    return(EXIT_SUCCESS);
}

//------------------------------------------------------------------------------
//Check wich characters string contains and print string according to test result
void check(string &str)
{
    remove_spaces(str);
    bool CORRECT= true;
    CORRECT    = correct(str);
    if(CORRECT)
    {
        cout << str << endl;
        cout << endl;    
    }
    else
        print_incorrect(str);
        
}

//------------------------------------------------------------------------------
// Function removes unnecessary spaces
void remove_spaces(string &str)
{
    string::size_type pos, end;

    //Leave only one space at one place
    for(pos =0; (pos=str.find(' ',pos)) != string::npos;)
    {
        end = str.find_first_not_of(' ',pos);
        pos++;
        //delete spaces from (end + 1) of the word till the begining of next word
        str.erase(pos, end-pos);
    }
    int END = str.length();
    //reomve space in the end of string
    if (str[END-1] == ' ')
    str.erase(END - 1);
        
}
//------------------------------------------------------------------------------
//Function checks if string contain any other charatters beside the lower case
bool correct(string &str)
{
    int END = str.length();
    for (int i=0; i < END; i++)
    {
        if(str[i] <32 || str[i] >32 && str[i]< 97 || str[i] > 122)
        {    
            
            return(false);
        }
    }
    return(true);
        
}

//------------------------------------------------------------------------------

//Function prints string in case if it is not suitable
void print_incorrect(string &str)
{
    cout << str << endl;
    int counter,beg, end;

    //Find first not suitable character
    for (int  counter=0;  counter <str.length(); counter++)
    {
        if(str[counter] <32 || str[ counter] >32 
            && str[counter]< 97 || str[counter] > 122)
        break;
    }
    //Find the end of this "word"
    end = str.find(' ', counter);
    if (end == -1)
        end = str.length();
    //Find the beddining of this "word"    
    for(beg = counter; beg >=0; beg--)
        if( str[beg] == ' ')
            break;
        
                
    string str1 = str;
    //Replace all string with spaces
    for(int i=0; i< str.length();i++)
        str1.replace( i,i+1," ");
    
    //Replase first not suitalbe "word" with *
    for(int i=beg+1; i< end;i++)
        str1.replace( i,i+1,"*");
    
    
    cout << str1 <<endl;
    
}


PM MAIL   Вверх
archimed7592
Дата 26.12.2007, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93




 ! 
archimed7592
margoshka, не забывай помечать темы решёнными!



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0968 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.