Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/12: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Irina20
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 12
1

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

08.07.2011, 13:35. Просмотров 2198. Ответов 28
Метки нет (Все метки)

Нужна помощь в написании программы. Дано предложение, слова в котором разделены пробелами, а в конце стоит точка. Заменить порядок слов в предложении на обратный.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2011, 13:35
Ответы с готовыми решениями:

программа на строки
помогите плиз кто нить решить!! 1. В строке найти заданную последовательность...

Программа на строки
Здравствуйте,помогите мне,пожалуйста,написать программу на С++. Даны две...

программа на строки
дан текст,состоящий из заглавных русских букв,сосчитать количество букв О,за...

программа на строки C++
Помогите написать программу, которая считывает текст с клавиатуры и выводит на...

Определить, сколько раз встречаются символы в строке
Добрый день, должна быть программа которая выводит статистику допустим: hello...

28
olympian
2 / 2 / 0
Регистрация: 18.10.2008
Сообщений: 34
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, " ");
И если нужно - удали точку
0
Irina20
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 12
08.07.2011, 14:54  [ТС] 3
А полностью программу не могли бы написать?
0
easybudda
Модератор
Эксперт CЭксперт С++
10147 / 6054 / 1521
Регистрация: 25.07.2009
Сообщений: 11,476
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;
}
0
Irina20
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 12
08.07.2011, 15:16  [ТС] 5
мы не используем getline и cout
0
nameless
Эксперт С++
339 / 303 / 36
Регистрация: 16.06.2009
Сообщений: 486
08.07.2011, 15:18 6
Цитата Сообщение от Irina20 Посмотреть сообщение
мы не используем getline и cout
А почему тогда в названии темы указано "Программа на С++ строки"?
1
4atty
45 / 45 / 1
Регистрация: 09.06.2011
Сообщений: 117
08.07.2011, 15:18 7
ну так замени их.
0
Mayonez
382 / 274 / 53
Регистрация: 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;
}
полгода уже не писал... но вроде работает
1
Irina20
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 12
08.07.2011, 15:27  [ТС] 9
Mayonez, большое спасибо, работает !!!! ++
0
easybudda
Модератор
Эксперт CЭксперт С++
10147 / 6054 / 1521
Регистрация: 25.07.2009
Сообщений: 11,476
08.07.2011, 15:35 10
Цитата Сообщение от Irina20 Посмотреть сообщение
мы не используем getline и cout

Не по теме:

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


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;
}
2
Irina20
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 12
08.07.2011, 15:38  [ТС] 11
easybudda, большое спасибо, что откликнулись!!!! Ловите +
0
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");
    }
:good: :D

1
Irina20
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 12
08.07.2011, 15:51  [ТС] 13
easybudda, как сделать чтоб точка после замены в конце предложения осталась?
0
easybudda
Модератор
Эксперт CЭксперт С++
10147 / 6054 / 1521
Регистрация: 25.07.2009
Сообщений: 11,476
08.07.2011, 15:55 14
Цитата Сообщение от Irina20 Посмотреть сообщение
как сделать чтоб точка после замены в конце предложения осталась?
вместо
C
1
printf("\n");
C
1
printf("\b.\n");
1
Irina20
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 12
08.07.2011, 16:02  [ТС] 15
easybudda, теперь получается
хорошая погода.
погода. хорошая.
т.е. точка после погоды осталась
0
easybudda
Модератор
Эксперт CЭксперт С++
10147 / 6054 / 1521
Регистрация: 25.07.2009
Сообщений: 11,476
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.
1
Irina20
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 12
08.07.2011, 16:17  [ТС] 17
easybudda, Огромное спасибо!!!!!!!!!!!!!!!
0
Kastaneda
Jesus loves me
Эксперт С++
4943 / 3020 / 346
Регистрация: 12.12.2009
Сообщений: 7,622
Записей в блоге: 2
Завершенные тесты: 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;
}
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:Во всех проектах отсутсвует предположение о случайном вводом двух и более пробелов подряд, моя программа позволяет пользователю ошибаться при записи текста в файл
0
Миниатюры
Программа на С++ строки  
Вложения
Тип файла: txt text.txt (99 байт, 10 просмотров)
Kastaneda
Jesus loves me
Эксперт С++
4943 / 3020 / 346
Регистрация: 12.12.2009
Сообщений: 7,622
Записей в блоге: 2
Завершенные тесты: 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");
русско-английский? :)

1
08.07.2011, 18:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2011, 18:57

Простая программа на строки
Помогите с задачей: написать функцию, которая обращяет строку, введённую с...

программа на тему строки!
помогите написать прогу! Во введённом тексте заменить цифры от 0 до 9 на...

Программа удаления из строки символов '0..9'
Программа удаления из строки символов '0..9' #include &lt;iostream&gt; #include...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru