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

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

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

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

24.10.2009, 10:18. Просмотров 1222. Ответов 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();
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2009, 10:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывести текст, меняя соседние слова местами (C++):

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

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

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

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

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

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

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

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

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

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

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

Приведи пример исходной строки, и результирующей.
0
Determinant
2 / 2 / 0
Регистрация: 11.04.2009
Сообщений: 67
25.10.2009, 16:57  [ТС] #15
Исходная строка: "Текст в моей программе", Результирующая: "В текст программе моей", если количество слов не кратно двум, тогда последнее слово так и оставлять.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2009, 16:57
Привет! Вот еще темы с ответами:

Поменять соседние слова в строке местами - C++
Доброе всем время суток. Есть такая задачка. Вроде несложная, но написать что-то не получается. Поменять слова в сообщении по принципу:...

Переставить соседние слова в строке местами - C++
добрый день, необходимо переставить соседние слова в строке местами. написал код для разбития строки на слова, в дальнейшем хочу...

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

Поменять местами каждые соседние слова - C++
Написать программу, которая считывает текст с клавиатуры и выводит его на экран, меняет местами каждые соседние слова (Borland MS-DOS)


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.10.2009, 16:57
Ответ Создать тему
Опции темы

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