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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Determinant
2 / 2 / 0
Регистрация: 11.04.2009
Сообщений: 67
#1

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

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

Пожалуста кто знает помогите найти ошибку в программе, программа считывает текст и выводит его меняя соседние слова местами вот код:
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();
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2009, 10:18     Вывести текст, меняя соседние слова местами
Посмотрите здесь:
C++ Введенный текст вывести на экран, меняя местами каждые два слова
C++ Написать программу,которая считывает текст из файла и выводит его на экран,меняя местами каждые два соседних слова.
Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова C++
C++ Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова
Написать программу, которая считывает текст с клавиатуры и выводит его на экран, меняет местами каждые соседние слова C++
Поменять соседние слова местами C++
Поменять соседние слова в строке местами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
24.10.2009, 11:32     Вывести текст, меняя соседние слова местами #2
Код ужасен.
Напиши условие полностью.
Determinant
2 / 2 / 0
Регистрация: 11.04.2009
Сообщений: 67
24.10.2009, 18:00  [ТС]     Вывести текст, меняя соседние слова местами #3
Составить программу которая меняет соседние слова местами и результат выводит в новую строку, например если есть слова: "Текст в моей программе", то результатом должна быть строка:"В текст программе моей".
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
24.10.2009, 18:40     Вывести текст, меняя соседние слова местами #4
А если кол-во слов не кратно двум?
Maestro
Маэстро
Вирусоборец
1238 / 362 / 28
Регистрация: 06.09.2009
Сообщений: 780
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;
...
Determinant
2 / 2 / 0
Регистрация: 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 и закрывается.
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 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 и закрывается.
Повреждение кучи.
Maestro
Маэстро
Вирусоборец
1238 / 362 / 28
Регистрация: 06.09.2009
Сообщений: 780
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'; // символ конца строки присваиваем следующему элементу...
...
Determinant
2 / 2 / 0
Регистрация: 11.04.2009
Сообщений: 67
25.10.2009, 12:55  [ТС]     Вывести текст, меняя соседние слова местами #9
Да, действительно, но и это тоже не та ошибка, теперь прога запускается и сразу же закривается, вообще ничего не показывая, хотя функцию getch(); я использую, Alt+F5 ничего не дает, так как закрывается сам C++.
Андрейка
419 / 223 / 27
Регистрация: 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.
Determinant
2 / 2 / 0
Регистрация: 11.04.2009
Сообщений: 67
25.10.2009, 15:51  [ТС]     Вывести текст, меняя соседние слова местами #11
Мне нужно код на C++ для dos, так как это мы ещё не учили.

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

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

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

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

Приведи пример исходной строки, и результирующей.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2009, 16:57     Вывести текст, меняя соседние слова местами
Еще ссылки по теме:
C++ Поменять местами соседние слова в тексте
Переставить соседние слова в строке местами C++
Поменять местами каждые соседние слова C++
C++ Поменять в строке местами соседние слова (fstream)
C++ Прочитать текстовый файл и поменять в каждой строке местами соседние слова

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

Или воспользуйтесь поиском по форуму:
Determinant
2 / 2 / 0
Регистрация: 11.04.2009
Сообщений: 67
25.10.2009, 16:57  [ТС]     Вывести текст, меняя соседние слова местами #15
Исходная строка: "Текст в моей программе", Результирующая: "В текст программе моей", если количество слов не кратно двум, тогда последнее слово так и оставлять.
Yandex
Объявления
25.10.2009, 16:57     Вывести текст, меняя соседние слова местами
Ответ Создать тему
Опции темы

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