Как сделать так, чтобы этот код выводил реальный текст в строках, а не адрес памяти? - PullRequest
0 голосов
/ 25 февраля 2019
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

void printpart1(int length, string *printpart1[18]) {
    int dummy;
    for (int i = 0; i < length; i++)
        cout << (printpart1 + i) << endl;

    cin >> dummy;

}

int main() {
    const int ARRAY_SIZE = 18;
    int dummy;
    string part1[ARRAY_SIZE] = { "An example of a career associated with computer studies is a Software Engineer. To become a",
        "Software Engineer, a minimum of a Bachelor’s Degree in Software Engineering is required which ",
        "could be obtained by first going into Engineering in post-secondary and choosing Software ",
        "Engineering as your major. Alternatively you could get a degree in Computer Sciences or another ",
        "closely related field. While a Bachelor’s Degree is enough to get some jobs, some employment ",
        "opportunities may require a Master’s Degree. Tuition for Engineering at the University of Western ",
        "Ontario for Canadian students is around $6000 and requires four years for a Bachelor’s degree. ",
        "This means with tuition alone it will cost around $24000 for the minimum qualifications. This price is  ",
        "much higher factoring in books, living, food etc. An employee in this field makes an average of ",
        "$80000 yearly and could get a variety of benefits depending on the company employing them. An  ",
        "average day for a software engineer varies by company but generally seems to begin with a few  ",
        "hours of good work, followed by a break to walk around and talk to coworkers about either personal  ",
        "things or work related affairs followed by more coding. Some days there are interviews with clients  ",
        "where a software engineer and the client communicate and discuss details of the project. The ",
        "majority of the average workday of a Software Engineer is spent programming. ",
        "https://study.com/articles/Become_a_Computer_Software_Engineer_Education_and_Career_Roadmap.html",
        "https://www.univcan.ca/universities/facts-and-stats/tuition-fees-by-university/ ",
        "https://www.coderhood.com/a-day-in-the-life-of-a-software-engineer/"
    };

    string *part1PTR = part1;

    printpart1(ARRAY_SIZE, &part1PTR);

}

Печать должна выполняться в функции с указателем на массив в качестве аргумента.Я был в этом целую вечность, пытаясь выяснить, как сделать эту работу.Любая помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 25 февраля 2019

Пожалуйста, проверьте ниже.

cout << (*printart1)[i]<< endl;
0 голосов
/ 25 февраля 2019

Похоже, вы не понимаете, как объявлять и использовать массив из массивов string и указателей на string.

    string part1[ARRAY_SIZE] = { "...", "...", ...

Вы объявляете part1 массивом строки .Но затем возникает некоторая путаница в том, как передать этот массив в printpart1().Вы предоставляете объявление как:

void printpart1(..., string *printpart1[18]) {

Где printpart1 указывает, что параметр printpart1 будет массивом указателей на строку.Затем вы вызываете printpart1() как:

printpart1(ARRAY_SIZE, &part1PTR);

Где вы объявили part1PTR как указатель на строку .Передавая адрес part1PTR, вы предоставляете printpart1() указатель на указатель на string.

, чтобы получить фактическую строкудля печати сначала необходимо разыменовать printpart1 (например, *printpart1), чтобы получить указатель на строку перед применением любого смещения и разыменования, например *(*printpart1 + i).

Например, следующие строки обеспечат вывод нужной строки:

void printpart1(int length, string *printpart1[18]) {
    int dummy;
    for (int i = 0; i < length; i++)
        cout << *(*printpart1 + i) << endl;

    cin >> dummy;

}

( примечание: *(*printpart1 + 1) эквивалентно (*printpart1)[i]. Все, что имеет больше смыслаВам обычно используется вторая форма)

Просто передайте массив

Теперь все это чрезмерно усложняет то, что должно быть так просто, как передача самого массива вprintpart1(), например, если вы измените свою функцию на:

void printpart1(int length, string *printpart1) {
    int dummy;
    for (int i = 0; i < length; i++)
        cout << printpart1[i] << endl;

    cin >> dummy;
}

Вам больше не нужен part1PTR, и вы можете просто вызвать вашу функцию с помощью:

    printpart1 (ARRAY_SIZE, part1);

Просмотрите все, подумайтеи дайте мне знать, если у вас есть дополнительные вопросы.

0 голосов
/ 25 февраля 2019

Вы забыли разыменовать указатель:

cout << *(printpart1 + i) << endl;
        ^

Кроме того, вы объявляете параметр как массив указателей , вам следует удалить часть массива:

printpart1(int length, string *printpart1)
                                         ^

... и измените вызов функции на

printpart1(ARRAY_SIZE, part1PTR);
                       ^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...