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

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

Войти
Регистрация
Восстановить пароль
 
nachC
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 78
#1

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

14.05.2013, 00:10. Просмотров 1133. Ответов 10
Метки нет (Все метки)

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

Ввести имя фамилию и отчество как одно данное типа строка. Определить длину строки и количество гласных в нем. Удалить все буквы "а" и "о" в фамилии. - C++
Помогите пожалуйста. Очень нужно сделать программу. Ввести имя фамилию и отчество как одно данное типа строка. Определить длину строки и...

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

Удалить из заданной строки группы латинских букв "ХУ" - C++
Удалить из заданной строки группы латинских букв “ХУ”. Вот наброски программы но она работает неправильно помогите доработать эту...

Удалить из символьной строки все слоги "ма" - C++
Не знаю как удалить из символьной строки все слоги "ма", помогите пожалуйста. int main() { string s; string word, temp; ...

Как обрезать эффективно часть строки, составляющую последние символы "/" и следующие за ними символы? - C++
здравствуйте, есть код, обрезающий во входной строке часть составляющую последние символы "/" и следующие за ними символы: std::string...

Удалить из файла все строки кроме тех что начинаются на словосочетание "Данные для" - C++
Есть текстовый файл с большим количеством строк. Нужно удалить из файла все строки кроме тех что начинаются на словосочетание "Данные для"....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
xtorne21st
интересующийся
304 / 275 / 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
430 / 365 / 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
4286 / 1408 / 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
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
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
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
17.05.2013, 16:27 #8
Цитата Сообщение от BumerangSP Посмотреть сообщение
проблема ваших алгоритмов в том, что если в строке окажутся одни кавычки, то слово все равно снесется целиком, хотя, по идее, не должно.
Ну да, ведь это не было оговорено в условии.

Добавлено через 4 минуты
Хотя в плане "эстетики" понятно о чём ваша речь.
DiffEreD
1430 / 767 / 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
интересующийся
304 / 275 / 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;
}
novi4ok
551 / 504 / 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);
     }
   }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2013, 18:06
Привет! Вот еще темы с ответами:

Дополнить строки знаками "+", чтобы все строки в нем имели длину 80 символов - C++
В текстовом файле f1 длина каждой строки не более 80 символов. Сформировать файл f2 таким образом, чтобы все строки в нем имели длину 80...

Ввести две строки, заменить первый символ "r" символами второй строки - C++
Нужно ввести две строки . Заменить первый символ &quot;r&quot; символами второй строки.

Найти номер последней по порядку строки в матрице, содержащей наибольшее количество букв "ш", "щ" - C++
Нужен код к этому условию, пожалуйста. Дана символьная матрица размера 13х18. Найти номер последней по порядку строки,содержащей...

Даны две строки. Если они начинаются с одинаковых символов, то напечатать "ДА", иначе - "НЕТ" - C++
Даны две строки. Если они начинаются с одинаковых символов, то напечатать &quot;ДА&quot;, иначе - &quot;НЕТ&quot;. (5)


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

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

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