Отображение строк по порядку - вопрос об упражнении - PullRequest
1 голос
/ 13 апреля 2011

Итак, я сейчас читаю книгу Бьярна Страуструпа «Программирование: принципы и практика с использованием c ++», и я в главе 3. В книге есть вопрос: «Напишите программу, которая предлагает пользователю ввести 3 строки значения, а затем выводит значения в порядке, разделенном запятыми. Таким образом, если пользователь вводит значения «Steinbeck», «Hemingway», «Fitzgerald», выходной сигнал должен быть «Fitzgerald, Hemingway, Steinbeck» ».

В данный момент я застрял в этом вопросе, я не могу заставить программу работать. Я знаю, как выводить целые числа в числовой последовательности, например, с помощью этого кода http://www.stroustrup.com/Programming/Solutions/Ch3/e3-6.cpp, но я не могу изменить это, чтобы заставить его работать со строковыми значениями (я получаю ошибку "Неустранимая ошибка LNK1120: 1 неразрешенные внешние данные" и я хочу понять, как это сделать.

Любая помощь приветствуется.

ps: вот модифицированный код ссылки (это моя неудачная попытка ответить на вопрос). И я знаю, что есть более простые способы сделать это, но я еще не там, это в следующей главе (векторы):

#include "D:\Mes Documents\Visual Studio 2010\std_lib_facilities.h"

int main()
{
    string name1 = " ";
    string name2 = " ";
    string name3 = " ";

    cout << "Please enter three names seperated by spaces: " << endl;
    cin >> name1 >> name2 >> name3;
    if (!cin) error("Something went wrong with the read");

    string smallest = " ";
    string middle = " ";
    string biggest = " ";

    if (name1<=name2 && name1<=name3)
    {
        smallest = name1;
        if (name2<=name3)
        {
            middle = name2;
            biggest = name3;
        }
        else
        {
            middle = name3;
            biggest = name2;
        }
    }
    else if (name2<=name1 && name2<=name3)
    {
        smallest = name2;
        if (name1<=name3)
        {
            middle = name1;
            biggest = name3;
        }
        else
        {
            middle = name3;
            biggest = name1;
        }
    }
    else
    {
        smallest = name3;
        if (name1<=name2)
        {
            middle = name1;
            biggest = name2;
        }
        else
        {
            middle = name2;
            biggest =name1;
        }
    }

    cout << "The names in order are: " << smallest << " " << middle << " " << biggest << endl;

    system("pause");
    return 0;
}

Ответы [ 3 ]

0 голосов
/ 13 августа 2014

Я использовал VS 2013 Express для Windows Desktop. Настройки как в B.3.1. Также я использую один и тот же проект для всех задач. Я просто исключаю старый .cpp и создаю новый. Убедитесь, что вы исключили все ваши старые файлы cpp! Кажется, они мешают друг другу

Итак, «правильное» решение. Для 3.6 просто измените строку на int и «Введите три имени» на что-то еще, например «Введите три целых числа»:

3,7

#include "../../std_lib_facilities.h"
int main()
{
    cout << "Enter three names:\n";
    string a = " ";
    string b = " ";
    string c = " ";
    cin >> a >> b >> c;
    if (a == b)
    {
        if (b == c)
        {
            cout << '\n' << a << ", " << b << ", " << c; 
        }
        else if (a > c)
        {
            cout << '\n' << c << ", " << a << ", " << b;
        }
        else if (a < c)
        {
            cout << '\n' << a << ", " << b << ", " << c;
        }
    }
    else if (a == c)
    {
        if (a > b)
        {
            cout << '\n' << b << ", " << a << ", " << c;
        }
        else if (a < b)
        {
            cout << '\n' << a << ", " << c << ", " << b;
        }
    }
    else if (b == c)
    {
        if (b > a)
        {
            cout << '\n' << a << ", " << b << ", " << c;
        }
        else if (b < a)
        {
            cout << '\n' << b << ", " << c << ", " << a;
        }
    }
    else if (a > b)
    {
        if (a > c)
        {
            if (b > c)
            {
                cout << '\n' << c << ", " << b << ", " << a;
            }
            else if (c > b)
            {
                cout << '\n' << b << ", " << c << ", " << a;
            }
        }
        else if (a < c)
        {
            cout << '\n' << b << ", " << a << ", " << c;
        }
    }
    else if (b > a)
    {
        if (b > c)
        {
            if (a > c)
            {
                cout << '\n' << c << ", " << a << ", " << b;
            }
            else if (c > a)
            {
                cout << '\n' << a << ", " << c << ", " << b;
            }
        }
        else if (b < c)
        {
            cout << '\n' << a << ", " << b << ", " << c;
        }
    }
}
0 голосов
/ 04 ноября 2018

Я использовал ту же ссылку и изменил, чтобы получить требуемый вывод: http://www.stroustrup.com/Programming/Solutions/Ch3/e3-6.cpp

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{

    cout << "Please enter three string values separated by a space:\n";
    string val1;
    string val2;
    string val3;
    cin >> val1 >> val2 >> val3;

    string smallest ="";
    string middle ="";
    string largest ="";
    if (val1<=val2 && val1<=val3) {
        smallest = val1;
        if (val2<=val3) {
            middle = val2;
            largest = val3;
        }
        else {
            middle = val3;
            largest = val2;
        }
    }
    else if (val2<=val1 && val2<=val3) {
        smallest = val2;
        if (val1<=val3)  {
            middle = val1;
            largest = val3;
        }
        else {
            middle = val3;
            largest = val1;
        }
    }
    else {  
        smallest = val3;
        if (val1<=val2) {
            middle = val1;
            largest = val2;
        }
        else {
            middle = val2;
            largest = val1;
        }
    }

    cout << "string values sorted : " << smallest << ", " << middle << ", " << largest <<'\n';
}

Вывод (надеюсь, это поможет):

Please enter three integer values separated by a space:
Steinbeck Hemingway Fitzgerald
values sorted : Fitzgerald, Hemingway, Steinbeck
0 голосов
/ 13 августа 2014

Решено # 6 таким образом - немного отличается от того, что просит задача.Чуть позже исправлю и выложу здесь решение для 3.7.

#include "../../std_lib_facilities.h"
int main()
{
    cout << "Enter three integers:\n";
    int a = 0;
    int b = 0;
    int c = 0;
    cin >> a >> b >> c;
    if (a == b)
    {
        if (b == c)
        {
            cout << '\n' << a << " = " << b << " = " << c;
        }
        else if (a > c)
        {
            cout << '\n' << a << " = " << b << " > " << c;
        }
        else if (a < c)
        {
            cout << '\n' << c << " > " << a << " = " << b;
        }
    }
    else if (a == c)
    {
        if (a > b)
        {
            cout << '\n' << a << " = " << c << " > " << b;
        }
        else if (a < b)
        {
            cout << '\n' << b << " > " << a << " = " << c;
        }
    }
    else if (b == c)
    {
        if (b > a)
        {
            cout << '\n' << b << " = " << c << " > " << a;
        }
        else if (b < a)
        {
            cout << '\n' << a << " > " << b << " = " << c;
        }
    }
    else if (a > b)
    {
        if (a > c)
        {
            if (b > c)
            {
                cout << '\n' << a << " > " << b << " > " << c;
            }
            else if (c > b)
            {
                cout << '\n' << a << " > " << c << " > " << b;
            }
        }
        else if (a < c)
        {
            cout << '\n' << c << " > " << a << " > " << b;
        }
    }
    else if (b > a)
    {
        if (b > c)
        {
            if (a > c)
            {
                cout << '\n' << b << " > " << a << " > " << c;
            }
            else if (c > a)
            {
                cout << '\n' << b << " > " << c << " > " << a;
            }
        }
        else if (b < c)
        {
            cout << '\n' << c << " > " << b << " > " << a;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...