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

Строки (Из строки удалить ту часть, которая в "" (кавычках)) - C++

Восстановить пароль Регистрация
 
nachC
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 78
14.05.2013, 00:10     Строки (Из строки удалить ту часть, которая в "" (кавычках)) #1
Из строки удалить ту часть, которая в "". Например dsfsdfsdfsdf"sdfsdfs"sdfsd - вывод dsfsdfsdfsdfsdfsd
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2013, 00:10     Строки (Из строки удалить ту часть, которая в "" (кавычках))
Посмотрите здесь:

Сколькими способами можно получить строку "В" из строки "А", вычеркивая некоторые символы C++
Вывести текст файла, заменив цифры от 0 до 9 на слова "ноль", "один"."девять", начиная каждое предложение с новой строки C++
C++ Ввести имя фамилию и отчество как одно данное типа строка. Определить длину строки и количество гласных в нем. Удалить все буквы "а" и "о" в фамилии.
C++ Даны две строки. Если они начинаются с одинаковых символов, то напечатать "ДА", иначе - "НЕТ"
Удалить из файла все строки кроме тех что начинаются на словосочетание "Данные для" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
14.05.2013, 00:58     Строки (Из строки удалить ту часть, которая в "" (кавычках)) #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
#include <iostream>
#include <string>
 
std::string parsLine(const std::string& str)
{
    bool state = false;
    std::string result_line;
 
    for (unsigned i = 0; i < str.size(); ++i)
    {
        if (str[i] == '\"' && !state)
        {
            state = true;
            continue;
        }
        else if (str[i] == '\"')
        {
            state = false;
            continue;
        }
        if (!state)
        {
            result_line.push_back(str[i]);
        }
    }
    return result_line;
}
 
int main()
{
    std::string line;
    std::cout << "put line: ";
 
    std::getline(std::cin, line);
    std::string new_line = parsLine(line);
    std::cout << new_line << std::endl;
}
nachC
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 78
16.05.2013, 20:12  [ТС]     Строки (Из строки удалить ту часть, которая в "" (кавычках)) #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# include <iostream>
using namespace std;
void main ()
{
    int k=0, i;
    char str[50];
    cin.getline(str,50);
    int a=strlen(str);
    system("cls");
    for(i=0;i<a;i++)
    {
 
        if(str[i]=='"')
        {
            i++;
            for(;str[i]!='"';i++);
            i++;
        }
        cout<<str[i];
    }
system("pause>>void");
}
Issues
428 / 363 / 37
Регистрация: 06.08.2012
Сообщений: 961
16.05.2013, 20:27     Строки (Из строки удалить ту часть, которая в "" (кавычках)) #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
 
int main()
{
    std::string s = "\"World Wrestling Entartaiment\"WWE.";
 
    std::string::iterator pos = std::find(s.begin(), s.end(), '\"');
    s.erase(pos, std::find(pos+1, s.end(), '\"')+1);
    
    std::cout << s << std::endl;
 
    system("PAUSE");
    return 0;
}
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
16.05.2013, 21:31     Строки (Из строки удалить ту часть, которая в "" (кавычках)) #5
xtorne21st, nachC, проблема ваших алгоритмов в том, что если в строке окажутся одни кавычки, то слово все равно снесется целиком, хотя, по идее, не должно.

nachC, к символу " (кавычки) слева стоит приписывать \ (слеш), т.к. он управляющий.

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
include <iostream>
#include <string>
 
std::string deleteCollocation(std::string str)
{
    const char* token = "\"";
    size_t pos1 = 0;
    if ((pos1 = str.find(token)) != std::string::npos && 
        (str.find(token, pos1 + 1)) != std::string::npos)
    {
        size_t pos2 = 0;
        while ((pos2 = str.find(token, pos1 + 1)) != std::string::npos)
        {
            str.erase(pos1, pos2 - pos1 + 1);
            pos1 = str.find(token);
        }   
    }
    return str;
}
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    std::cout << deleteCollocation(str) << std::endl;
}
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
16.05.2013, 21:43     Строки (Из строки удалить ту часть, которая в "" (кавычках)) #6
BumerangSP, Ваше решение можно упростить
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
 
std::string deleteCollocation(std::string str)
{
    const char* token = "\"";
    size_t pos1 = 0, pos2 = 0;
 
    while ( (pos1 = str.find(token, pos1)) != std::string::npos &&
            (pos2 = str.find(token, pos1 + 1)) != std::string::npos )
        str.erase( pos1, pos2 - pos1 + 1 );
 
    return str;
}
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    std::cout << deleteCollocation(str) << std::endl;
}
BumerangSP
16.05.2013, 21:51
  #7

Не по теме:

Благодарю, но не стоило

xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
17.05.2013, 16:27     Строки (Из строки удалить ту часть, которая в "" (кавычках)) #8
Цитата Сообщение от BumerangSP Посмотреть сообщение
проблема ваших алгоритмов в том, что если в строке окажутся одни кавычки, то слово все равно снесется целиком, хотя, по идее, не должно.
Ну да, ведь это не было оговорено в условии.

Добавлено через 4 минуты
Хотя в плане "эстетики" понятно о чём ваша речь.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
17.05.2013, 16:47     Строки (Из строки удалить ту часть, которая в "" (кавычках)) #9
Еще через регулярку:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
#include <boost/regex.hpp>
 
int main()
{
    std::string s = "dsfsdfsdfsdf\"sdfsdfs\"sdfsd one \"two three\" qwerty \" ver\" \"gfh ";
    boost::regex reg("(\").*?\\1");
    std::cout<<s<<'\n';
    std::cout<<boost::regex_replace(s, reg, "");
    
    std::cout<<std::endl;
    return 0;
}
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
28.05.2013, 18:05     Строки (Из строки удалить ту часть, которая в "" (кавычках)) #10
SeregaC++, дело в том, что ваш пример сугубо адаптирован под стоку в которой есть двойные кавычки. Если же попробовать ввести стоку без кавычек: segfault. Немного адаптировал под этот случай ваш код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <algorithm>
 
int main()
{
    std::cout << "Put line: ";
    std::string line;
    std::getline(std::cin, line);
 
    std::string::iterator first = std::find(line.begin(), line.end(), '\"');
    std::string::iterator second = std::find(first+1, line.end(), '\"');
    if (second != line.end())
    {
        line.erase(first, ++second);
    }
 
    std::cout << line << std::endl;
}
Добавлено через 8 минут
А ещё лучше так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
#include <algorithm>
 
int main()
{
    std::cout << "Put line: ";
    std::string line;
    std::getline(std::cin, line);
 
    std::string::iterator first = std::find(line.begin(), line.end(), '\"');
    if (first != line.end())
    {
        std::string::iterator second = std::find(first+1, line.end(), '\"');
        if (second != line.end())
        {
            line.erase(first, ++second);
        }
    }
 
    std::cout << line << std::endl;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2013, 18:06     Строки (Из строки удалить ту часть, которая в "" (кавычках))
Еще ссылки по теме:

C++ Дополнить строки знаками "+", чтобы все строки в нем имели длину 80 символов
Удалить из символьной строки все слоги "ма" C++
C++ Найти номер последней по порядку строки в матрице, содержащей наибольшее количество букв "ш", "щ"

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

Или воспользуйтесь поиском по форуму:
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
28.05.2013, 18:06     Строки (Из строки удалить ту часть, которая в "" (кавычках)) #11
и я попробую. с помощью самых примитивных, и всегода под рукой имеющихся средств
C++
1
2
3
4
5
6
7
8
9
   char *pBuffer = "abcd \"to be deleted\"xyz";
   char *pBegin = ::strchr (pBuffer, '\"');
   char *pEnd = NULL;
   if (pBegin != NULL){
     pEnd = ::strchr (pBuffer + pBegin + 1, '\"');
     if (pEnd != NULL){
       ::strcpy (pBuffer + pBegin, pBuffer + pEnd + 1);
     }
   }
Yandex
Объявления
28.05.2013, 18:06     Строки (Из строки удалить ту часть, которая в "" (кавычках))
Ответ Создать тему
Опции темы

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