Форум программистов, компьютерный форум CyberForum.ru

Программа на С++ строки - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Irina20
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 12
08.07.2011, 13:35     Программа на С++ строки #1
Нужна помощь в написании программы. Дано предложение, слова в котором разделены пробелами, а в конце стоит точка. Заменить порядок слов в предложении на обратный.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2011, 13:35     Программа на С++ строки
Посмотрите здесь:

C++ Программа на строки
Простая программа на строки C++
C++ программа на строки C++
программа на строки C++
C++ Программа удаления из строки символов '0..9'
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
08.07.2011, 19:07     Программа на С++ строки #21
В продолжение конкурса быдлокодерских поделок
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <string.h>
    
void reverse_words(char * str){
    char * p;
    if ( str ){
        if ( p = strtok(str, " ") ){
            reverse_words(NULL);
            printf("%s.\n", p);
        }
    }
    else {
        if ( p = strtok(NULL, " ") ){
            reverse_words(NULL);
            printf("%s ", p);
        }
    }
}
 
int main(void){
    char buf[BUFSIZ], * p;
    
    while ( printf("String: ") && scanf("%[^\n]%*c", buf) == 1 ){
        if ( p = strchr(buf, '.') )
            *p = '\0';
        else {
            printf("Wrong input!\n");
            continue;
        }
        reverse_words(buf);
    }
    
    return 0;
}
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Во всех проектах отсутсвует предположение о случайном вводом двух и более пробелов подряд, моя программа позволяет пользователю ошибаться
А все другие протонным лучом, выпущенным из монитора убивают? Вы просто из любопытства попробуйте скомпилировать и на вход строку с несколькими пробелами между словами передать...
Код
$ ./revwords
String: aaa      bbb      ccc    .
ccc bbb aaa.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.07.2011, 19:29     Программа на С++ строки #22
Цитата Сообщение от easybudda Посмотреть сообщение
В продолжение конкурса быдлокодерских поделок
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <string>
#include <sstream>
#include <stack>
#include <cstdio>
#include <cstring>
 
class word{
    std::string w;
public:
    word(std::string ww):w(ww+' '){};
    ~word(){
        std::cout<<w;
    }
};
 
void output(std::istringstream& is){
    std::string s;
    if(is>>s)
        output(is);
    else return;
    word w(s);
}
 
int main(){
        char buf[BUFSIZ];
        
        while ( printf("String: ") && scanf("%[^\n]%*c", buf) == 1 ){
                char * tail = strchr(buf, '.');
                if ( ! tail ){
                        printf("Wrong input!\n");
                        continue;
                }
                *tail = '\0';
                output(std::istringstream(std::string(buf)));
                printf("\b.\n");
        }
        
        return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
08.07.2011, 19:34     Программа на С++ строки #23
Цитата Сообщение от Kastaneda Посмотреть сообщение
std::cout<<w;
опаньки!
Цитата Сообщение от Irina20 Посмотреть сообщение
мы не используем getline и cout
морально-нравственные устои не позволяют...
Kastaneda
08.07.2011, 19:41
  #24

Не по теме:

easybudda, да, конечно же Забыл, что в нашем распоряжении все средства C++, кроме getline() и std::cout

easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
08.07.2011, 19:51     Программа на С++ строки #25
Вариант чуть короче:
C
1
2
3
4
5
6
7
8
void reverse_words(char * str){
    char * p;
    
    if ( p = strtok(str, " ") ){
        reverse_words(NULL);
        printf("%s%s", p, ( str ) ? ".\n" : " ");
    }
}
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
08.07.2011, 21:48     Программа на С++ строки #26
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
 
using namespace std;
 
int main()
{
        string s("wwww eeee rrrrr hhhhhhhh ooo."), s1;
        s.resize(s.size()- 1);
        vector<string> vec;
        istringstream str_potok (s);
 
        //Жалко, что в этом месте нельзя обойтись без дополнительной буферной переменной s1,
        //если кто знает, подскажите как. 
        while (str_potok>> s1) {
         vec.push_back (s1);
        }
 
        s1.resize(0);  
        
        while (vec.size()){
         s1+=vec.back()+=' ';
         vec.pop_back();
        }
 
        s1.resize(s1.size()- 1);
        
        printf ("%s\n", s1.c_str());  
        getchar();
         
        return 0;
}
Добавлено через 21 минуту
Ещё проще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
 
using namespace std;
 
int main()
{
        string s("wwww eeee rrrrr hhhhhhhh ooo."), s1, s3;
        s.resize(s.size()- 1);
        istringstream str_potok (s);
 
        while (str_potok>> s1) {
         s3.insert(0, s1.insert(0, " ")); 
        }
 
        printf ("%s\n", s3.c_str()+1);  
        getchar();
         
        return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
08.07.2011, 22:09     Программа на С++ строки #27
easybudda, да я забыл что токены выбираются внезависимости от длины промежутков, согласен проверка в твоём проекте не нужна
Миниатюры
Программа на С++ строки  
-=ЮрА=-
Заблокирован
Автор FAQ
08.07.2011, 22:34     Программа на С++ строки #28
PS:За токены ты прав можно не мучаться с удалением лишних пробелов, однако твой код некорректно работает для предложений с точками внутри него, например для такого, думаю условием окончания текста лучше брать последний пробел в нём, т.к. по синтаксису последний знак пунктуации идёт после слова, перед которым всегда есть пробел.
Миниатюры
Программа на С++ строки  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2011, 22:42     Программа на С++ строки
Еще ссылки по теме:

C++ программа на тему строки!
программа на строки C++
Найдите ошибку, программа на строки C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
08.07.2011, 22:42     Программа на С++ строки #29
Цитата Сообщение от kravam Посмотреть сообщение
Жалко, что в этом месте нельзя обойтись без дополнительной буферной переменной s1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <algorithm>
#include <iterator>
#include <string>
#include <sstream>
#include <vector>
    
int main(){
    std::string s("aaa bbb ccc");
    std::istringstream ist(s);
    std::vector<std::string> vec;
    std::copy(std::istream_iterator<std::string>(ist), std::istream_iterator<std::string>(), std::back_inserter(vec));
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
    
    return 0;
}
Yandex
Объявления
08.07.2011, 22:42     Программа на С++ строки
Ответ Создать тему
Опции темы

Текущее время: 07:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru