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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
//Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
#1

Поменять каждые два соседних слова в строке местами - C++

09.06.2010, 23:10. Просмотров 1559. Ответов 22
Метки нет (Все метки)

прога должна менять каждые 2 сосенних слова местами)
пол дня сижу не могу решить
вот последняя моя мысль
но всеравно не работает
помогите исправить код

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
#include <fstream>
#include <iostream>
#include<clocale>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
    char m [500];
int n,g;
      ifstream in("input.txt");
      char t;
    
       if(in.is_open()==false)
      {
            cout << "file open error!";
            return 1;
      }
 
 
 int i=0;
 int j=0;
 char c[20];
 char f[20];
 char s[500];
      while(in.get(t))
      {
            m[i]=t;
            i++;n=i;
              }
 
      for(i=0; i<=n-1; i++)
      {
  if(m[i]!=' ')
   c[i]=m[i];
  else 
     
  for(j=i+1; j<=n-1; j++)
  {
      if (m[j]!=' ')
      f[j]=m[j];
  }
  i=j;
      for (j=0; j<=n-1; j++)
          cout<<f[j];
          cout<<c[j];
          s[j]=f[j];
     }
 
 
 
  
      cin.get();
}
Добавлено через 23 минуты
подскажите хоть чно нибудь до утра должен прогу сделать
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2010, 23:10     Поменять каждые два соседних слова в строке местами
Посмотрите здесь:

C++ Написать программу,которая считывает текст из файла и выводит его на экран,меняя местами каждые два соседних слова.
C++ Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова
Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова C++
Поменять местами каждые соседние слова C++
В фразе поменять местами два слова C++
C++ Введенный текст вывести на экран, меняя местами каждые два слова
C++ Строки. Считывание текста и его вывод, в котором каждые 2 соседних слова меняются местами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
edd
36 / 36 / 0
Регистрация: 13.05.2010
Сообщений: 81
09.06.2010, 23:20     Поменять каждые два соседних слова в строке местами #2
те переписать (блоки готовые есть) или в твоей разбираться?
//Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
09.06.2010, 23:30  [ТС]     Поменять каждые два соседних слова в строке местами #3
лутше в моей, а вообще как получится.
edd
36 / 36 / 0
Регистрация: 13.05.2010
Сообщений: 81
10.06.2010, 00:58     Поменять каждые два соседних слова в строке местами #4
местами менять только в строке или весь текст,? если во всём тексте , считая текст как одну строку, то посколько слов выводить?
//Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
10.06.2010, 01:20  [ТС]     Поменять каждые два соседних слова в строке местами #5
менять местами весь текст. обратно нужно вывести переставленый текст
ввели:
aaaa ssss dddd ffff
vvv ddd fff rrrr
вывели:
ssss aaaa ffff dddd
ddd vvv rrrr fff

вот мое задание
Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова.
mrMRak
38 / 38 / 3
Регистрация: 02.06.2010
Сообщений: 105
10.06.2010, 01:41     Поменять каждые два соседних слова в строке местами #6
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
#include "stdafx.h"
#include <string.h>
#include  <iostream>
using namespace std;
 
int main ()
{
    char str[] = "aaaa ssss dddd ffff";
    char * first, *second;
    char *fin = new char [strlen(str)];
    cout<<"start string:  "<<str;
    first = strtok (str, " ");
    second = strtok(NULL, " ");
    strcpy(fin,second);
    strcat(fin," ");
    strcat(fin,first);
    while (second!=NULL)
    {   
        first = strtok (NULL, " ");
        if (first==NULL)
        {   
            cout<<"\n The finish  string is:\n "<<fin<<endl;
            system("pause");
            return 0;
        }
                       strcat(fin," ");
        second = strtok(NULL," ");
        if (second==NULL)
        {
            strcat(fin,first);
            cout<<"\nThe number of words are not even, but the finish  string is\n"<< fin<<endl;
            system("pause");
            return 0;
        }
        strcat(fin,second);
        strcat(fin," ");
        strcat(fin,first);
    
     }
            cout<<"\n The finish  string is:\n "<<fin<<endl;
    system("pause");
    return 0;
    
}

вот набросал хотя брал не из файла, а просто массив букв.

также неясно как поступать, если слов нечетное количество... я просто последнее дописывал в конце.
//Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
10.06.2010, 01:51  [ТС]     Поменять каждые два соседних слова в строке местами #7
я попробовал выдало ошибку
fatal error C1083: Cannot open include file: 'stdafx.h': No such file or directory


я заменил 'stdafx.h' на <stdafx.h> и на <stdafx> но всеравно ошибка.
чтобы с файла читало переделаю эт не тяжело.
mrMRak
38 / 38 / 3
Регистрация: 02.06.2010
Сообщений: 105
10.06.2010, 02:10     Поменять каждые два соседних слова в строке местами #8
#include "stdafx.h" - это хедер из MSVC++. если у вас не вижуал, просто удалите строку)
//Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
10.06.2010, 02:39  [ТС]     Поменять каждые два соседних слова в строке местами #9
я уже исправил спасибо)
но не могу сделать чтобы с файла читал 71 ошибку выдает;
что то не верно изменяю

Добавлено через 18 минут
я добавил вот такой кусочек
C++
1
2
3
4
5
6
7
ifstream in("input.txt");
***** char str;
***** if(in.is_open()==false)
***** {
*********** cout << "file open error!";
*********** return 1;
***** }while(in.get(str))
ну и еще пару строк
но все ошибки выдает сдесь, ошибки для каждой строчки часто повторяются

Добавлено через 6 минут
вот такие ошибки выдает:
error C3872: '0xa0': this character is not allowed in an identifier
error C2144: syntax error : 'char' should be preceded by ';'
error C2133: 'str' : unknown size
fatal error C1903: unable to recover from previous error(s); stopping compilation
error C2664: 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::get(_Elem &)' : cannot convert parameter 1 from 'char []' to 'char &'
и они постоянно повторяються
что я мог сделать не так??
edd
36 / 36 / 0
Регистрация: 13.05.2010
Сообщений: 81
10.06.2010, 02:43     Поменять каждые два соседних слова в строке местами #10
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
#include <fstream>
#include <iostream>
//#include<clocale>
using namespace std;
 
int main()
{
        //setlocale(LC_ALL, "rus");
        char m [500];
int n;
      ifstream in("input.txt");
      char t;
        
       if(in.is_open()==false)
      {
            cout << "file open error!";
            return 1;
      }
 int i=0, nach1=0, nach2=0, cc=0;
 int j=0, kon1=0, kon2=0;
 char c[40];
 char f[20];
 
 
      while(in.get(t))
      {
            m[i]=t; cout<<t;
                        i++;n=i;
                        if (t==' ' || t=='\n') cc++;
                        
            
              }
      cout<<cc<<endl;
      
      for (int c1=0 ;c1<cc/2; c1++){
 
      for(i=nach1; i<=n; i++){
          if (m[i]=='\n') {kon1=i-1; break;}
            if(m[i]!=' ') c[i-nach1]=m[i];
            else {kon1=i-1; break;}}
nach2=i+1;              
 
for(j=nach2; j<=n; j++){
    if (m[j]=='\n') {kon2=j-1; break;}
    if (m[j]!=' ') f[j-nach2]=m[j];
    else {kon2=j-1; break;}}
       
for (int i=0; i<= (kon2-nach2); i++)
                  cout<<f[i];
                    cout<<m[kon1+1];
for (int i=0; i<= (kon1-nach1); i++)
                  cout<<c[i];
                    cout<<m[kon2+1];
                    nach1=j+1;}
      if((cc%2)!=0) {for (int i=kon2+2; i<n; i++) cout<<m[i];}
 
 
              
     
cin.get();
 return 0;}
лови работает,,,

Добавлено через 1 минуту
твой вариант
//Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
10.06.2010, 02:43  [ТС]     Поменять каждые два соседних слова в строке местами #11
огромное тебе спасибо !!!
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
10.06.2010, 02:48     Поменять каждые два соседних слова в строке местами #12
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 <iostream>
#include <fstream>
#include <sstream>
#include <string>
 
int main(){
    const char * fileName = "input.txt";
    std::string buf, a, b;
    std::ifstream ifs(fileName);
    if ( ! ifs.is_open() ){
        std::cerr << "Can't open input file!" << std::endl;
        return 1;
    }
    while ( std::getline(ifs, buf) ){
        std::istringstream ist(buf);
        while ( ist.good() ){
            if ( ist >> a ){
                if ( ist >> b )
                    std::cout << b << " ";
                std::cout << a << " ";
            }
        }
        std::cout << std::endl;
    }
    
    ifs.close();
    return 0;
}
edd
36 / 36 / 0
Регистрация: 13.05.2010
Сообщений: 81
10.06.2010, 02:54     Поменять каждые два соседних слова в строке местами #13
easybudda, там нужно ещё слово со след строки цеплять (если в строке нечетное кол-во слов)
//Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
10.06.2010, 02:55  [ТС]     Поменять каждые два соседних слова в строке местами #14
программа работает хорошо только не меняет местами 2 последних слова
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
10.06.2010, 03:01     Поменять каждые два соседних слова в строке местами #15
edd, да вроде в задании ничего про это не сказано... Нет у слова соседнего - так и менять ничего не нужно...

Цитата Сообщение от //Александр Посмотреть сообщение
программа работает хорошо только не меняет местами 2 последних слова
Чья именно? Вам их несколько написали.
Поменять каждые два соседних слова в строке местами
edd
36 / 36 / 0
Регистрация: 13.05.2010
Сообщений: 81
10.06.2010, 03:04     Поменять каждые два соседних слова в строке местами #16
//Александр, у меня всё меняет в любых вариантах, проверь что бы в конце строк не было пробелов после слов
easybudda
10.06.2010, 03:06
  #17

Не по теме:

edd, таки

Цитата Сообщение от edd Посмотреть сообщение
всё меняет в любых вариантах
или
Цитата Сообщение от edd Посмотреть сообщение
что бы в конце строк не было пробелов после слов
?

//Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
10.06.2010, 03:07  [ТС]     Поменять каждые два соседних слова в строке местами #18
я неправельно протестил обе правельно работаю только одна с консоли другая с файла
Благодадю вас за помощь
edd
36 / 36 / 0
Регистрация: 13.05.2010
Сообщений: 81
10.06.2010, 03:11     Поменять каждые два соседних слова в строке местами #19
easybudda, согласен криво прочитал, значит зря ковырял, но работает как и писал со след строкой

Добавлено через 3 минуты
Цитата Сообщение от easybudda Посмотреть сообщение

Не по теме:

edd, таки

или

?

енто подправить три сек, код готовый есть, только и так пока чужой исходник перелопатил, прога в кучу строк получилась, да и смысла нет с них этого не требуют)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2010, 03:14     Поменять каждые два соседних слова в строке местами
Еще ссылки по теме:

C++ Строки. В тексте поменять местами каждые два соседних слова
Поменять в строке местами два слова (Паскаль -> C++) C++
C++ Строковые потоки. Переставить местами два соседних слова
C++ Программа меняющая местами два соседних символа в строке

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

Или воспользуйтесь поиском по форуму:
//Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
10.06.2010, 03:14  [ТС]     Поменять каждые два соседних слова в строке местами #20
edd Вот что получается
Миниатюры
Поменять каждые два соседних слова в строке местами  
Yandex
Объявления
10.06.2010, 03:14     Поменять каждые два соседних слова в строке местами
Ответ Создать тему
Опции темы

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