как получить с помощью scanf строку (char *) из пользовательского ввода, разделенную двойными кавычками и содержащую пробелы [closed]

0

Я довольно noob с c и c++, и я застрял, пытаясь прочитать пользовательский ввод, заключенный между двойными кавычками для программы, которую я должен доставить в мой класс алгоритмов. Запись будет в такой форме: "что-то вроде этого, с пробелами и ограничено этими двумя двойными кавычками". Мне нужно получить от него строку (char *), содержащуюся между разделителями. К несчастью, я пытался без проблем решить эту небольшую проблему...

Среда разработки - это виртуализованная Windows 7 и идеал (оба требования от учителя) - это DEV c++

Кто-нибудь может дать нам подсказку или помочь? Я застрял в этом, и у меня не хватит времени. заранее спасибо!

  • 4
    Опубликуйте детали того, что вы уже пробовали . Может быть, кто-то может помочь вам продолжить / исправить ваш подход.
  • 0
    Если вы не ограничены C, а не C ++, как указано вашими тегами, почему вы используете scanf? Это очень сильный показатель того, что учитель (и) понятия не имеет о C ++ (с 1985 года). Есть слишком много «учителей C ++», которые не имеют ни малейшего понятия, часто обучающих «C с iostreams» вместо него, но в этом случае кажется, что это даже пропускается.
Теги:
dev-c++

2 ответа

4
Лучший ответ

Предполагая, что у вас есть поток, где текущий символ является двойной цитатой, вы можете просто

  1. ignore() текущий символ.
  2. getline() используя '"' в качестве разделителя.

Вот код, который пропускает ведущее пространство, проверяет, что следующий символ является '"' и, если это так, считывает значение в str:

std::string str;
if ((in >> std::ws).peek() == '"' && std::getline(in.ignore(), str, '"')) {
    std::cout << "received \"" << str << "\"\n";
}
  • 0
    большое Вам спасибо. Я забыл упомянуть, что я должен использовать scanf, чтобы получить строку
  • 0
    Возможно, вы захотите взглянуть на документацию по scanf. Формат% [^ scanset] может помочь вам прочитать все символы между двойными кавычками.
0

Если я правильно понял вопрос, то вам подходит следующее. Этот подход устранит каждую пунктуацию.

#include <string>
#include <algorithm>
#include <iostream>

int main ()
{
  std::string input ;
  std::cout << "Please, enter data: ";

  std::getline (std::cin,input);
  input.erase( remove_if(input.begin(), input.end(), &ispunct),  input.end());
  std::cout << input << std::endl;

  std::cin.get();
  return 0;
}

Это результат.

>Please, enter data: There' ?are numerous issues. 
There are numerous issues

Этот подход - именно то, что вы ищете, используя strtok

#include <stdio.h>
#include <iostream>

int main() 
{
    char sentence[] = "\"something like this, with spaces, and delimited by this two double quotes\"";  
    char * word;
    std::cout << "Your sentence:\n " << sentence << std::endl;
    word = strtok (sentence,"\"");
    std::cout << "Result:\n " << word << std::endl;

    return 0;
}

Результат

Your sentence:
 "something like this, with spaces, and delimited by this two double quotes"
Result:
 something like this, with spaces, and delimited by this two double quotes
  • 0
    На самом деле не решает вопрос " разделитель».
  • 0
    Оно делает. Запустите код и введите следующее «Есть много проблем». В результате есть много проблем
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню