Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
1

Переворот слов в строке char

11.11.2013, 21:08. Показов 1868. Ответов 14
Метки нет (Все метки)

Из строки со словами, разделенными одним или несколькими пробелами, получить новую строку с перевернутыми словами. (из "мама мыла раму" получить "амам алым умар"). Вот моя наработка. Выделе слова и перевернул их. Помогите,пожалуйста, с последующими шагами. Или наставьте на верный путь.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <cstring>
using namespace std;
int main ()
{
    char str[256], *slova[256], cstr[256], *p;
    int i(0);
    cin.get (str, 255);
    cin.ignore();
    strcpy(cstr, str);
    p=strtok(str, " ");
    while (p)
    {
        slova[i]=p;
        strrev (slova[i++]);
        p=strtok(NULL, " ");
    }
    system ("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.11.2013, 21:08
Ответы с готовыми решениями:

Найти количество слов стоящих из 5 символов в строке типа char
Помогите не получатся написать программу. Пример Ввод : 12345 Найти количество слов. Вывод : 2

Переворот слов в строке
Здесь функция для переворота всей строки: // функция переворота строки void StrRev(char* S) {...

Переворот строки: Несовместимость типов int и char
Есть простенькая программка с функцией reverse, которая изменяет порядок символов строки на...

Переворот слов
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;sstream&gt; int main() { std::string input;...

14
2 / 2 / 1
Регистрация: 23.10.2013
Сообщений: 38
11.11.2013, 21:31 2
HenryDukart, It's dangerous to go alone. Take this.
Кликните здесь для просмотра всего текста

В функции turnString передаешь два указателя: исходная строка и строка куда нужно перевертыш записать. Еще передаешь размер.
main.cpp
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
#include <iostream>
#include <cstring>
using namespace std;
 
void turnString(char* baseSt, char* pointSt, int size){
    for(int i=0;i<size;i++){
        pointSt[i]=baseSt[size-i-1];
    }
}
void show(char* a,int size){
    for(int i=0;i<size;i++){
        cout<<a[i];
    }
    cout<<endl;
}
int main(){
    char* baseString;
    int stSize=0;
    baseString=new char[stSize];
    baseString="Yoba, eto ty?";
    stSize=strlen(baseString);
    show(baseString,stSize);
    char* pointString;
    pointString=new char[stSize];
    turnString(baseString,pointString,stSize);
    show(pointString,stSize);
    system("pause");
    return 0;
}
0
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
11.11.2013, 21:48  [ТС] 3
SMYH, YOBY NET, ETO EGO MAMA, CHTO EMU PEREDAT?
Нет, ваша функция переворачивает строку (для этого есть strrev). Мне надо, чтобы были перевернуты все слова, чтобы они остались на своих местах и сохранилось количество пробелов между ними. За старания, конечно, спасибо.
1
89 / 51 / 15
Регистрация: 26.06.2013
Сообщений: 179
11.11.2013, 22:08 4
Хм, заинтересовала меня ваша задачка, я отпишусь позже с отчетом.
0
2 / 2 / 1
Регистрация: 23.10.2013
Сообщений: 38
11.11.2013, 22:35 5
HenryDukart, готово, парень
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstring>
using namespace std;
int main (){
    char str[] ="TI UIDESH, TAK I NE UZNAV, CHTO YOBA ETO TI";
    char *pch;
    char point[256]="";
    printf ("Turning words in string:\"%s\"\n",str);
    pch=strtok (str," ,.-");
    while (pch != NULL){
        char *tmp=new char[strlen(pch)];
        strcpy(tmp,pch);
        strrev(tmp);
        strcat(point,tmp);
        strcat(point," ");
        pch = strtok (NULL, " ,.-:?");
    }
    printf("%s\n",point);
    system("pause");
    return 0;
}
1
89 / 51 / 15
Регистрация: 26.06.2013
Сообщений: 179
11.11.2013, 22:45 6
Цитата Сообщение от SMYH Посмотреть сообщение
HenryDukart, готово, парень
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstring>
using namespace std;
int main (){
    char str[] ="TI UIDESH, TAK I NE UZNAV, CHTO YOBA ETO TI";
    char *pch;
    char point[256]="";
    printf ("Turning words in string:\"%s\"\n",str);
    pch=strtok (str," ,.-");
    while (pch != NULL){
        char *tmp=new char[strlen(pch)];
        strcpy(tmp,pch);
        strrev(tmp);
        strcat(point,tmp);
        strcat(point," ");
        pch = strtok (NULL, " ,.-:?");
    }
    printf("%s\n",point);
    system("pause");
    return 0;
}
Код работать не будет - нет заголовка одного :3

Добавлено через 55 секунд
Подключил заголовок, код выдал правильный результат, сейчас еще потестим.
0
2 / 2 / 1
Регистрация: 23.10.2013
Сообщений: 38
11.11.2013, 22:58 7
Anton_Kretov, какого заголовка?
0
Don't worry, be happy
17204 / 10081 / 1945
Регистрация: 27.09.2012
Сообщений: 25,158
Записей в блоге: 1
11.11.2013, 23:01 8
Цитата Сообщение от SMYH Посмотреть сообщение
какого заголовка?
<cstdlib>
0
2 / 2 / 1
Регистрация: 23.10.2013
Сообщений: 38
11.11.2013, 23:02 9
Croessmah, А зачем он? Я же вроде никаких функций из него не использовал
0
89 / 51 / 15
Регистрация: 26.06.2013
Сообщений: 179
11.11.2013, 23:04 10
Цитата Сообщение от SMYH Посмотреть сообщение
Croessmah, А зачем он? Я же вроде никаких функций из него не использовал
http://www.cplusplus.com/reference/cstdio/printf/
0
2 / 2 / 1
Регистрация: 23.10.2013
Сообщений: 38
11.11.2013, 23:05 11
Anton_Kretov, ну да, я уже загуглил и понял. Но почему у меня код работал без подключения этого заголовка. Студия "сама" подключила?
0
Don't worry, be happy
17204 / 10081 / 1945
Регистрация: 27.09.2012
Сообщений: 25,158
Записей в блоге: 1
11.11.2013, 23:11 12
Цитата Сообщение от SMYH Посмотреть сообщение
А зачем он? Я же вроде никаких функций из него не использовал
C++
1
system ( "pause" ) ;
Добавлено через 58 секунд
Цитата Сообщение от SMYH Посмотреть сообщение
Студия "сама" подключила
угу. Поэтому при переносе на другой компилятор могут повыбегать ошибки

Добавлено через 2 минуты
C++
1
2
3
    int stSize=0;
    baseString=new char[stSize];//0???
    baseString="Yoba, eto ty?";//утечка памяти
Добавлено через 1 минуту
C++
1
char *tmp=new char[strlen(pch)];//потом нет освобождения памяти - утечка
1
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
11.11.2013, 23:12  [ТС] 13
SMYH, уже тепло. Но ведь количество пробелов-то не сохраняется.
0
Don't worry, be happy
17204 / 10081 / 1945
Регистрация: 27.09.2012
Сообщений: 25,158
Записей в блоге: 1
11.11.2013, 23:13 14
Цитата Сообщение от HenryDukart Посмотреть сообщение
Но ведь количество пробелов-то не сохраняется.
Программа для переставления символов
Кликните здесь для просмотра всего текста
C++
1
#include <cctype>
0
2 / 2 / 1
Регистрация: 23.10.2013
Сообщений: 38
11.11.2013, 23:18 15
HenryDukart, в задании было сказано "подсчитать количество пробелов"? Ты об этом ничего не сказал.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.11.2013, 23:18

Переворот слов
Дали такие задания: Задание 1 В строке, содержащей несколько слов, разделенных пробелом,...

Переворот слов в тексте
Всем привет. Такая задача имеется: Каждое слово текста преобразовать таким обpазом,чтобы оно...

В строке, вводимой пользователем, определить сколько слов в строке, составить новое предложение из чётных слов
В строке вводимой пользователем, определить сколько слов в строке, составить новое предложение из...

Java в текстовом файле подсчитать количество слов имеющих вторую букву char 1 и четвертую char2 ( char1 и char
heip

Ввести символьную строку. Выполнить переворот каждого слова в строке
Ввести символьную строку. Выполнить переворот каждого слова в строке (заменив первую букву с...

Переворот строки, не используя временные переменные и не осуществляя полного прохода по всей строке
У вас есть переменная std::string str = &quot;abcdefghijklmop&quot;;Напишите код переворота строки, не...


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

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

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