Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
2 / 2 / 3
Регистрация: 11.04.2009
Сообщений: 67
1

Вывести текст, меняя соседние слова местами

24.10.2009, 10:18. Показов 2078. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пожалуста кто знает помогите найти ошибку в программе, программа считывает текст и выводит его меняя соседние слова местами вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int j,t(0),f(0),len;
len=strlen(str);
char slovo[25],*slova[10];
while (t<len)
{for (j=0,i=t; isspace(str[i])==0;i++,j++)
{slovo[j]=str[i];
slovo[j]='\0';
strcpy(slova[f],slovo);
f++;
t=i+1;}}
strcpy(str," ");
char *c;
for (t=0;t<f;t++)
{slova[t]=c;
slova[t]=slova[t+1];
slova[t+1]=c;
strcat(str,slova[t]);
strcat(str," ");}
cout<<"Invert text:"<<str;
fout<<str;
getch();
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.10.2009, 10:18
Ответы с готовыми решениями:

Введенный текст вывести на экран, меняя местами каждые два слова
Напишите программу, которая выведет на экран введённый текст выведет на экран меняя местами каждые...

Считать текст из файла и вывести его на экран, меняя местами каждые два соседних слова
Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые...

Вывести строки меняя попарно слова местами
Здравствуйте! Такая проблема: была задача считать n строк и вывести их, меняя попарно слова...

Написать программу,которая считывает текст из файла и выводит его на экран,меняя местами каждые два соседних слова.
Написать программу,которая считывает текст из файла и выводит его на экран,меняя местами каждые два...

17
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
24.10.2009, 11:32 2
Код ужасен.
Напиши условие полностью.
0
2 / 2 / 3
Регистрация: 11.04.2009
Сообщений: 67
24.10.2009, 18:00  [ТС] 3
Составить программу которая меняет соседние слова местами и результат выводит в новую строку, например если есть слова: "Текст в моей программе", то результатом должна быть строка:"В текст программе моей".
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
24.10.2009, 18:40 4
А если кол-во слов не кратно двум?
0
Маэстро
Вирусоборец
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
24.10.2009, 18:53 5
Determinant, Код действительно ужасен. Не столько может быть алгоритмом, сколько визульным представлением и из-за этого практически нечитаем. Совет: Всегда делайте отступы в условиях и вложеных блоках. Хотя бы так:
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
...
int j, t(0), f(0), len;
 
len = strlen(str);
char slovo[25], *slova[10];
 
while(t < len){
   for(j = 0, i = t; isspace(str[i]) == 0; i++, j++){
     slovo[j] = str[i];
     slovo[j] = '\0';
     strcpy(slova[f], slovo);
     f++;
     t = i + 1;
    }
  }
strcpy(str, " ");
char *c;
for(t = 0; t < f; t++){
   slova[t] = c;
   slova[t] = slova[t + 1];
   slova[t + 1] = c;
   strcat(str, slova[t]);
   strcat(str, " ");
  }
cout<<"Invert text:"<<str;
fout<<str;
getch();
...
А ошибочка скорее всего здесь. Ты с перестановками запутался наверное:
C++
1
2
3
4
5
6
7
8
9
10
...
char *c;
for(t = 0; t < f; t++){
   slova[t] = c; // Присваиваем временно значение 'slova[t]'
   slova[t] = slova[t + 1]; // А дальше перезатираем сохранённое временно значение
   slova[t + 1] = c; // И присваиваем непонятно что...
   strcat(str, slova[t]);
   strcat(str, " ");
  }
...
Пробуй так
C++
1
2
3
4
5
...
   c = slova[t]; // 'c' это временный буфер и сюда сохраняем.
   slova[t] = slova[t + 1];
   slova[t + 1] = c;
...
0
2 / 2 / 3
Регистрация: 11.04.2009
Сообщений: 67
25.10.2009, 08:43  [ТС] 6
Прога запускается, но сразу же выдает:The NTVDM has encountered an illegal instruction CS:b40b IP:of 07 ff 07 f8 и закрывается.
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.10.2009, 11:00 7
Цитата Сообщение от Determinant Посмотреть сообщение
The NTVDM has encountered an illegal instruction CS:b40b IP:of 07 ff 07 f8 и закрывается.
Повреждение кучи.
0
Маэстро
Вирусоборец
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
25.10.2009, 11:37 8
Возможно стоит к slovo[j] = '\0' добавлять единицу? У вас присваивание одному элементу и значения и символа конца строки...
C++
1
2
3
4
5
...
for(j = 0, i = t; isspace(str[i]) == 0; i++, j++){
     slovo[j] = str[i];
     slovo[j + 1] = '\0'; // символ конца строки присваиваем следующему элементу...
...
0
2 / 2 / 3
Регистрация: 11.04.2009
Сообщений: 67
25.10.2009, 12:55  [ТС] 9
Да, действительно, но и это тоже не та ошибка, теперь прога запускается и сразу же закривается, вообще ничего не показывая, хотя функцию getch(); я использую, Alt+F5 ничего не дает, так как закрывается сам C++.
0
425 / 229 / 87
Регистрация: 25.03.2009
Сообщений: 744
25.10.2009, 13:16 10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstdlib>
#include <iostream>
#include <vector>
#include <string>
using namespace std;
 
int main(int argc, char *argv[])
{
    vector<string>a(10);
    for (int i = 0 ; i < a.size() ; i++)
     cin>>a[i];
    for (int i = 0 ; i < a.size() ; i+=2)
    {
        string t = a[i];
        a[i] = a[i+1];
        a[i+1] = t;
        }
    for (int i = 0 ; i < a.size() ; i++)
     cout<<a[i]<<' ';
    system("PAUSE");
    return EXIT_SUCCESS;
}
dev-CPP.
0
2 / 2 / 3
Регистрация: 11.04.2009
Сообщений: 67
25.10.2009, 15:51  [ТС] 11
Мне нужно код на C++ для dos, так как это мы ещё не учили.

Добавлено через 1 час 8 минут
Да только, если можно код на C++ для Dos, это мы ещё не учили.

Добавлено через 46 минут
Если можно код C++ под dos, этого мы ещё не учили.
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.10.2009, 16:08 12
Все поняли. Не надо повторять!!!

Добавлено через 30 секунд
Цитата Сообщение от Determinant Посмотреть сообщение
Мне нужно код на C++ для dos
Какой компилятор?
0
2 / 2 / 3
Регистрация: 11.04.2009
Сообщений: 67
25.10.2009, 16:40  [ТС] 13
Повторяю не специально, просто глючил браузер. Компилятор:Borland C++ version 3.1
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.10.2009, 16:47 14
Цитата Сообщение от Determinant Посмотреть сообщение
Повторяю не специально, просто глючил браузер.
Три раза, и каждый раз по разному?

Цитата Сообщение от Determinant Посмотреть сообщение
Borland C++ version 3.1
К сожалению, у меня не установлен такой компилятор. И устанавливать его нет желания. Сделаю на нормальном компиляторе, переделаешь под свой.

Приведи пример исходной строки, и результирующей.
0
2 / 2 / 3
Регистрация: 11.04.2009
Сообщений: 67
25.10.2009, 16:57  [ТС] 15
Исходная строка: "Текст в моей программе", Результирующая: "В текст программе моей", если количество слов не кратно двум, тогда последнее слово так и оставлять.
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.10.2009, 16:59 16
Determinant, Ввод из консоли?
Вводится по одному слову, или строка из слов целиком?
0
2 / 2 / 3
Регистрация: 11.04.2009
Сообщений: 67
25.10.2009, 17:38  [ТС] 17
Вводится строка слов целиком.
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.10.2009, 17:54 18
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
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <sstream>
 
int main(int argc, const char** argv) {
    std::string str;
    std::vector<std::string> slist;
 
    /** читаем строку из консоли */
    std::getline(std::cin, str);
    
    /** разделяем на слова */
    std::stringstream ss(str);
    while ( !ss.eof() ) {
        ss >> str;
        slist.push_back(str);
    }
    
    /** меняем порядок */
    std::reverse(slist.begin(), slist.end());
 
    /** ввыводим результат */
    std::copy(slist.begin(), slist.end(), std::ostream_iterator<std::string>(std::cout, " "));
 
    return 0;
}
1
25.10.2009, 17:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.10.2009, 17:54
Помогаю со студенческими работами здесь

Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова
Ребят, помогите пожалуста програмку написать, мне завтра для зачета надо....я нехрена не знаю(((...

Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова
Вот исходный код: #include &lt;fstream&gt; #include &lt;iostream&gt; //#include&lt;clocale&gt; using namespace...

Написать программу, которая считывает текст с клавиатуры и выводит его на экран, меняет местами каждые соседние слова
Помогите пожалуйста Написать программу, которая считывает текст с клавиатуры и выводит его на...

Поменять соседние слова местами
задание: Дано предложение. Вывести его на экран, меняя местами каждые два соседних слова. Никак...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru