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

Убрать в переменной типа string пробелы - C++

Восстановить пароль Регистрация
 
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
24.02.2014, 17:46     Убрать в переменной типа string пробелы #1
Задача у меня такая.
Пользователь вводит текст с консоли.
1.Удалить все пробелы и знаки препинания.
2. Очередную букву в цикле поменять на следующую букву.

То есть к примеру я ввожу текст:
Abc, abc
Должно получатся
Bcdbcd

Добавлено через 41 секунду
Похожую тему найти не смог. Сумел написать вот столько
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void Change(string x);
 
int main()
{
    string x;
    cout<<"Enter a string"<<;
    cin>>x;
    Change(&x);
    cout<<x<<endl;
 
    system("pause");
}
 
 
void Change(string x)
{
    
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2014, 17:46     Убрать в переменной типа string пробелы
Посмотрите здесь:

Переменной d присвоить первую цифру после запятой некоторой переменной x типа float C++
C++ Здравствуйте! Создал класс std::string. Не создается объкт типа string... Подскажите в чем причина?
C++ Убрать лишние пробелы
C++ Как присвоить переменной типа String значение argv[0]?
FindFirstFileW. Как подставить значение переменной типа string в функцию? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
24.02.2014, 18:04     Убрать в переменной типа string пробелы #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
#include <algorithm>
 
int main()
{
   std::cout << "-> ";
   std::string str;
   std::getline(std::cin, str);
   str.erase(std::remove_if(str.begin(), str.end(), [](char ch)
   {
      return isspace(ch) || ispunct(ch);
   }), str.end());
 
   std::cout << str << "\n";
 
   return 0;
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.02.2014, 18:04     Убрать в переменной типа string пробелы #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <algorithm>
#include <cctype>
#include <iostream>
#include <string>
 
int main() {
    std::string s;
    std::getline( std::cin, s );
    std::cout << s << std::endl;
    auto it = std::remove_if( s.begin(), s.end(), [](char x){return std::isspace(x) || std::ispunct(x); } );
    s.erase( it, s.end() );
    std::transform( s.begin(), s.end(), s.begin(), [](char x)->char { if(std::isalpha(x)) return x+1; else return x; } );
    std::cout << s << std::endl;
    return 0;
}
алфавит уж сами попробуйте замкнуть
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
24.02.2014, 18:11  [ТС]     Убрать в переменной типа string пробелы #4
DiffEreD, можно комментарии чтобы я понял?

Добавлено через 6 минут
а подскажите пожалуйста, как сделать, чтобы вместо A выводилась буква D? Вмеcто D - H? То есть чтобы разница в 3 буквы была?
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
24.02.2014, 18:14     Убрать в переменной типа string пробелы #5
^Tecktonik_KiLLeR, там обычна работа со string и STL - комментировать нечего. Примеры описываются тут: http://en.cppreference.com/w/cpp/str...c_string/erase и тут: http://en.cppreference.com/w/cpp/algorithm/remove
Да, и мой код не учитывает смену букв.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
24.02.2014, 18:18  [ТС]     Убрать в переменной типа string пробелы #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
void delsymb(string str);
 
int main()
{
   cout << "-> ";
   string str;
   getline(cin, str);
  
   delsymb(&str);
 
  cout<<str<<endl;
 
   
 system("pause");
   return 0;
}
 
 
void delsymb(string str)
{
     str.erase(std::remove_if(str.begin(), str.end(), [](char ch)
   {
      return isspace(ch) || ispunct(ch);
   }), str.end());
}
функцию getline компилятор не понимает. Какую библиотеку подключить надо?
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
24.02.2014, 18:21     Убрать в переменной типа string пробелы #7
using namespace std; есть?
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
24.02.2014, 18:22  [ТС]     Убрать в переменной типа string пробелы #8
есть

Добавлено через 22 секунды
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
#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <string.h>
#include <Windows.h>
using namespace std;
void delsymb(string str);
 
int main()
{
   cout << "-> ";
   string str;
   cin>>str;
  
   delsymb(&str);
 
  cout<<str<<endl;
 
   
 system("pause");
   return 0;
}
 
 
void delsymb(string str)
{
     str.erase(std::remove_if(str.begin(), str.end(), [](char ch)
   {
      return isspace(ch) || ispunct(ch);
   }), str.end());
}
Ошбки
Error 1 error C2678: binary '>>' : no operator found which takes a left-hand operand of type 'std::istream' (or there is no acceptable conversion) c:\documents and settings\admin.alexey\мои документы\visual studio 2010\projects\al\al\al.cpp 13 1 Al
Error 2 error C2664: 'delsymb' : cannot convert parameter 1 from 'std::string *' to 'std::string' c:\documents and settings\admin.alexey\мои документы\visual studio 2010\projects\al\al\al.cpp 15 1 Al
Error 3 error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion) c:\documents and settings\admin.alexey\мои документы\visual studio 2010\projects\al\al\al.cpp 17 1 Al
4 IntelliSense: no operator ">>" matches these operands c:\documents and settings\admin.alexey\мои документы\visual studio 2010\projects\al\al\al.cpp 13 7 Al
5 IntelliSense: no suitable constructor exists to convert from "std::string *" to "std::basic_string<char, std::char_traits<char>, std::allocator<char>>" c:\documents and settings\admin.alexey\мои документы\visual studio 2010\projects\al\al\al.cpp 15 12 Al
6 IntelliSense: no operator "<<" matches these operands c:\documents and settings\admin.alexey\мои документы\visual studio 2010\projects\al\al\al.cpp 17 7 Al
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
24.02.2014, 18:28     Убрать в переменной типа string пробелы #9
Разве что так:
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
#include <iostream>
#include <algorithm>
#include <string>
#include <Windows.h>
 
using namespace std;
 
void delsymb(string& str);
 
int main()
{
   cout << "-> ";
   string str;
   getline(cin, str);
 
   delsymb(str);
 
   cout<<str<<endl;
 
 
   system("pause");
   return 0;
}
 
 
void delsymb(string& str)
{
   str.erase(std::remove_if(str.begin(), str.end(), [](char ch)
   {
      return isspace(ch) || ispunct(ch);
   }), str.end());
}
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
24.02.2014, 18:33  [ТС]     Убрать в переменной типа string пробелы #10
DiffEreD, Спасибо большое за функцию. Так в чем же ошибки были?

Добавлено через 11 секунд
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
Error 1 error C2678: binary '>>' : no operator found which takes a left-hand operand of type 'std::istream' (or there is no acceptable conversion) c:\documents and settings\admin.alexey\мои документы\visual studio 2010\projects\al\al\al.cpp 13 1 Al
например эта?

Добавлено через 2 минуты
DiffEreD, и еще скажите пожалуйста как поменять букву.
Помню было такое что то (char)65
Вот это выводит букву А. Как можно использовать этот метод для смены букв в программе. Что то наоборот нужно, (int)A?
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
24.02.2014, 18:45     Убрать в переменной типа string пробелы #11
Смена буквы:
C++
1
2
3
4
5
6
7
8
9
void delsymb(string& str)
{
   str.erase(std::remove_if(str.begin(), str.end(), [](char ch)
   {
      return isspace(ch) || ispunct(ch);
   }), str.end());
 
   std::for_each(str.begin(), str.end(), [](char& ch){++ch;});
}
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
Так в чем же ошибки были?
Функция delsymb принимала аргумент по значению, а вы ей адрес объекта string пихали, вот оно и не могло правильно привести тип одного к другому. Если функция должна модифицировать что то, то лучше что бы она это по не константной ссылке принимала.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2014, 18:47     Убрать в переменной типа string пробелы
Еще ссылки по теме:

C++ Запись информации из вектора типа string в вектор типа double
C++ Читать строку типа string из файла, разбить ее на массив слов типа char
Конвертация переменной типа string в массив int C++

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

Или воспользуйтесь поиском по форуму:
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
24.02.2014, 18:47  [ТС]     Убрать в переменной типа string пробелы #12
Спасибо. А не подскажете что сделать с буквами?
Yandex
Объявления
24.02.2014, 18:47     Убрать в переменной типа string пробелы
Ответ Создать тему
Опции темы

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