Форум программистов, компьютерный форум 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'
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
olympian
2 / 2 / 0
Регистрация: 18.10.2008
Сообщений: 33
08.07.2011, 14:35     Программа на С++ строки #2
C++
1
2
3
4
5
6
7
std::string src;
std::vector<std::string> arr;
boost::split(arr, src, boost::is_any_of(" "));
std::vector<std::string> reverse;
for (auto it = arr.begin(); it != arr.end(); it++)
    reverse.push_back(*it);
std::string res = boost::join(reverse, " ");
И если нужно - удали точку
Irina20
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 12
08.07.2011, 14:54  [ТС]     Программа на С++ строки #3
А полностью программу не могли бы написать?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
08.07.2011, 15:12     Программа на С++ строки #4
Irina20, Сначала надо бы найти точку в строке и обрезать строку по ней, но с этим Вы и сами справитесь А слова в обратоной последовательности вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
#include <sstream>
#include <stack>
    
int main(){
    std::string str;
    
    while ( std::cout << "String: " && std::getline(std::cin, str) && ! str.empty() ){
        std::istringstream ist(str);
        std::stack<std::string> stk;
        while ( ist >> str )
            stk.push(str);
        while ( ! stk.empty() ){
            std::cout << stk.top() << ' ';
            stk.pop();
        }
        std::cout << std::endl;
    }
    
    return 0;
}
Irina20
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 12
08.07.2011, 15:16  [ТС]     Программа на С++ строки #5
мы не используем getline и cout
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
08.07.2011, 15:18     Программа на С++ строки #6
Цитата Сообщение от Irina20 Посмотреть сообщение
мы не используем getline и cout
А почему тогда в названии темы указано "Программа на С++ строки"?
4atty
 Аватар для 4atty
45 / 45 / 1
Регистрация: 09.06.2011
Сообщений: 117
08.07.2011, 15:18     Программа на С++ строки #7
ну так замени их.
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
08.07.2011, 15:20     Программа на С++ строки #8
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
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
 
int main()
{
    vector <string> v;
    string s;
    char c;
    //читаем предложение до точки
    while(true)
    {
        c = getchar();
        if(c == '.') break;
        s += c;
    }
    //разделяем его на отдельные слова
    string temp;
    for (int i = 0; i <= s.size(); i++)
    {
        c = s[i];
        if (c == ' ' || i == s.size()) 
        {
            v.push_back(temp);
            temp = "";
            continue;
        }
        temp += c;
    }
    //выводим слова в обратной последовательности
    for (int i = v.size()-1; i >= 0; i--)
        cout << v[i] << " ";
    cout << "." << endl; 
 
    return 0;
}
полгода уже не писал... но вроде работает
Irina20
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 12
08.07.2011, 15:27  [ТС]     Программа на С++ строки #9
Mayonez, большое спасибо, работает !!!! ++
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
08.07.2011, 15:35     Программа на С++ строки #10
Цитата Сообщение от Irina20 Посмотреть сообщение
мы не используем getline и cout

Не по теме:

Быдлокодеры всех стран объединяйтесь!


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
#include <iostream>
#include <string>
#include <sstream>
#include <stack>
#include <cstdio>
    
int main(){
    char buf[BUFSIZ];
    
    while ( printf("String: ") && scanf("%[^\n]%*c", buf) == 1 ){
        std::string str(buf);
        std::istringstream ist(str);
        std::stack<std::string> stk;
        while ( ist >> str )
            stk.push(str);
        while ( ! stk.empty() ){
            printf("%s ", stk.top().c_str());
            stk.pop();
        }
        printf("\n");
    }
    
    return 0;
}
Irina20
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 12
08.07.2011, 15:38  [ТС]     Программа на С++ строки #11
easybudda, большое спасибо, что откликнулись!!!! Ловите +
Kastaneda
08.07.2011, 15:45
  #12

Не по теме:

Цитата Сообщение от Irina20 Посмотреть сообщение
мы не используем getline и cout
Цитата Сообщение от easybudda Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
while ( printf("String: ") && scanf("%[^\n]%*c", buf) == 1 ){
        std::string str(buf);
        std::istringstream ist(str);
        std::stack<std::string> stk;
        while ( ist >> str )
            stk.push(str);
        while ( ! stk.empty() ){
            printf("%s ", stk.top().c_str());
            stk.pop();
        }
        printf("\n");
    }


Irina20
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 12
08.07.2011, 15:51  [ТС]     Программа на С++ строки #13
easybudda, как сделать чтоб точка после замены в конце предложения осталась?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
08.07.2011, 15:55     Программа на С++ строки #14
Цитата Сообщение от Irina20 Посмотреть сообщение
как сделать чтоб точка после замены в конце предложения осталась?
вместо
C
1
printf("\n");
C
1
printf("\b.\n");
Irina20
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 12
08.07.2011, 16:02  [ТС]     Программа на С++ строки #15
easybudda, теперь получается
хорошая погода.
погода. хорошая.
т.е. точка после погоды осталась
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
08.07.2011, 16:09     Программа на С++ строки #16
Цитата Сообщение от Irina20 Посмотреть сообщение
точка после погоды осталась
Ну так её удалить надо было...
Продолжаем быдлокодить, с ужасом ждём, что будет, когда окажется, что и STL нельзя использовать...
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
#include <iostream>
#include <string>
#include <sstream>
#include <stack>
#include <cstdio>
#include <cstring>
    
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';
        std::string str(buf);
        std::istringstream ist(str);
        std::stack<std::string> stk;
        while ( ist >> str )
            stk.push(str);
        while ( ! stk.empty() ){
            printf("%s ", stk.top().c_str());
            stk.pop();
        }
        printf("\b.\n");
    }
    
    return 0;
}
Код
$ ./str_stk
String: aaa bbb ccc. ddd
ccc bbb aaa.
Irina20
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 12
08.07.2011, 16:17  [ТС]     Программа на С++ строки #17
easybudda, Огромное спасибо!!!!!!!!!!!!!!!
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.07.2011, 17:18     Программа на С++ строки #18
Цитата Сообщение от easybudda Посмотреть сообщение
с ужасом ждём, что будет, когда окажется, что и STL нельзя использовать...
Да не, если getline и cout нельзя, то STL по-любому можно ))

Но, если вдруг (мало ли)) все таки нельзя, то вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <cstdio>
#include <cstring>
 
int main(){
    char buf[BUFSIZ], *ptr;
    while ( printf("String: ") &&scanf("%[^\n]%*c", buf) == 1 ){
        char * tail = strchr(buf, '.');
        if ( ! tail ){
            printf("Wrong input!\n");
            continue;
        }
        *tail = '\0';
        while(ptr=strrchr(buf,' ')){
            printf("%s ",ptr+1);
            while(*--ptr==' ');
            *(ptr+1)='\0';
        }
        printf("%s.\n",buf);
    }
    return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
08.07.2011, 18:35     Программа на С++ строки #19
Вот код и скриншот работы
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
//Удаление множественных пробелов
char * move_num_spaces(char * str);
//Перенос текстового блока с позиции from_pos в позицию start_pos
char * move_text_block(char * str, int start_pos, int from_pos);
 
FILE * f;
char str[1024],*s;
int sLen = 0;
 
int main()
{
    if(!(f = fopen("text.txt","rb+")))
        printf("Oshibka otkritia fila s textom\r\n");
    else
    {
        //Читаем предложение из файла
        fseek(f,0,SEEK_END);
        sLen = ftell(f);
        fseek(f,0,SEEK_SET);
        fread(str,1,sLen,f);
        fclose(f);
        printf("\tINPUT TEXT\r\n");
        printf("%s\r\n",str);
        printf("\tYDALENIE MNOZHESTVENNIH PROBELOV\r\n");
        strcpy(str,move_num_spaces(str));
        printf("%s\r\n",str);
        printf("\rREVERSE WORDS\r\n");
        s = strrchr(str,' ');
        if(s != NULL)
        {
            s[strlen(s) - 1] = '\0';//Убираем точку
            while(s != NULL)
            {
                printf("%s ",s + 1);
                str[strlen(str) - strlen(s)] = '\0';
                s = strrchr(str,' ');
            }
            printf(" %s.\r\n",str);
        }
    }
    printf("Press any key to continue\r\n");
    scanf("%s",str);
    return 0;
}
 
//Удаление множественных пробелов
char * move_num_spaces(char * str)
{
    int nCount,start_pos,from_pos;
    char * chBuf = NULL;
    if(str != NULL)
    {
        chBuf = strchr(str,' ');
        while(chBuf != NULL)
        {
            nCount = 0;
            start_pos = strlen(str) - strlen(chBuf);
            while(chBuf + nCount)
            {
                if(chBuf[nCount] != ' ')
                    break;
                nCount++;
            }
            from_pos = start_pos + nCount;
            if(1 < nCount)
                str = move_text_block(str, start_pos + 1, from_pos);
            chBuf = strchr((chBuf + nCount),' ');
        }
    }
    return str;
}
 
//Перенос текстового блока с позиции from_pos в позицию start_pos
char * move_text_block(char * str, int start_pos, int from_pos)
{
    int i = from_pos;
    if(str != NULL)
    {
        while(str[i] != '\0')
        {
            str[start_pos + (i - from_pos)] = str[i];
            i++;
        }
        str[strlen(str) - (from_pos - start_pos)] = '\0';
    }
    return str;
}
PS:Во всех проектах отсутсвует предположение о случайном вводом двух и более пробелов подряд, моя программа позволяет пользователю ошибаться при записи текста в файл
Миниатюры
Программа на С++ строки  
Вложения
Тип файла: txt text.txt (99 байт, 9 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2011, 18:57     Программа на С++ строки
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.07.2011, 18:57     Программа на С++ строки #20
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Во всех проектах отсутсвует предположение о случайном вводом двух и более пробелов подряд,
Цитата Сообщение от Kastaneda Посмотреть сообщение
C++
1
while(*--ptr==' ');
а в версии easybudda такая проверка просто не нужна.

Не по теме:

C++
1
2
3
printf("\tYDALENIE MNOZHESTVENNIH PROBELOV\r\n");
/////////////////////////////////////////////////////////////
printf("\rREVERSE WORDS\r\n");
русско-английский?

Yandex
Объявления
08.07.2011, 18:57     Программа на С++ строки
Ответ Создать тему
Опции темы

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