TransWikia.com

Как задать ввод строки с клавиатуры?

Stack Overflow на русском Asked by mirrormirrormirror on January 31, 2021

#include <iostream>
#include <string>
using namespace std;

class String
{
public:
    char str[20];
    int n = strlen(str);
    int count = 1;
    int max = 0;
    int def() {
        cout << "Строка: ";
        cout << str << endl;
        for (int i = 0; i < n; i++) {
            if (str[i] == str[i + 1]) {
                count++;
            }
            else { count = 1; }
            if (count > max) {
                max = count;
            }
        }
        cout << "Результат: ";
        cout << max;
        return 0;
    }
};

int main() {
    setlocale(LC_ALL, "russian");
    String execute{"1111111111110000000"};
    execute.def();
    return 0;
}

Как задать ввод строки с клавиатуры в функции main()?

2 Answers

А относительно моего кода: как мне сделать так, чтобы я мог вводить значение в кавычках с клавиатуры? String execute{"1111111111110000000"}; – mirrormirrormirror

#include <iostream>
#include <string>
using namespace std;

class String
{
public:
//        char str[20];
// лучше всё таки хранить строку в std::string раз пишете на с++  
    std::string str;

// ОШИБКА 1: строка была не инициализирована, в ней ничего нет, как же тогда можно узнавать ее размер? 
//    int n = strlen(str);

// ОШИБКА 2: есть создания класса с конструктором (в теле main), но нет самого конструктора в теле класса - его надо создать
//    чтобы строка не копировалась 2 раза в конструктор ее передаём по ссылке - символ &
    String(const std::string& in) {
        str = in;
    }

// если это не члены класса, то им не место в теле класса
//    int count = 1;
//    int max = 0;
    int def() {
      // переменные которые используются в теле метода класса лучше из тела класса перенести в этот метод
      int count = 1;
      int max = 0;

        // вычисляем длину строки 
        const int n = str.size();

        cout << "Строка: ";
        cout << str << endl;
        for (int i = 0; i < n; i++) {
    // ОШИБКА 3: вы сравниваете текущий и последующий символы в строке, но цикл у вас до последнего, т.е. вы сравниваете с символом после последнего в строке - нехорошо
    // такой код конечно будет работать, потому что любая строка заканчивается 0, но лучше было бы сделать так: сравнивать с предыдущим символом и начинать с 1 символа, а не с 0

    //    for (int 1 = 0; i < n; i++) {
    //        if (str[i] == str[i - 1]) {

            if (str[i] == str[i + 1]) {
                count++;
            }
            else { count = 1; }
            if (count > max) {
                max = count;
            }
        }
        cout << "Результат: ";
        cout << max;

        // зачем нужен метод возвращающий значение, если он всегда возвращает одно и тоже?
        return 0;
    }
};

int main() {
    setlocale(LC_ALL, "russian");

    // получаем строку с клавиатуры
    std::string name;
    std::getline(std::cin, name);

    // работаем со строкой
    String execute{"1111111111110000000"};
    execute.def();

    return 0;
}

Answered by Zhihar on January 31, 2021

https://en.cppreference.com/w/cpp/string/basic_string/getline

std::cout << "What is your name? ";

std::string name;
std::getline(std::cin, name);

Answered by Zhihar on January 31, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP