2013-09-08 4 views
-5

В основном, я хочу написать программу, которая использует функцию для отображения на экране звездочек. Длина указана входным параметром.so, если пользователь вводит 2, он будет выглядеть так:Возврат строки из функции C++

**

**

string myfunct(int thelength) 
{ 
    string s1; 
    for (int i=1;i<=thelength;i++) 
    { 
     string s1 =+ " * "; 
    } 
    return s1; 
} 
+3

и проблема? – 4pie0

+6

Да, вы не задали свой вопрос, но я предполагаю, что вы должны использовать '+ =' вместо '= +'. – catscradle

+4

Лично я бы не использовал ничего, кроме 'return std :: string (thelength, '*');' Если вы настаиваете на использовании цикла, привыкаете к нулевому индексу и используйте '++ i', вместо 'i ++' (для 'int' не имеет значения, что вы используете, но для итераторов часто более эффективно использовать preincrement, чем postincrement). –

ответ

0

В коде можно определить локальную переменную string s1 внутри цикл, который затмевает один определенный снаружи. В результате на каждой итерации вы добавляете одну астерикс в пустую строку s1. Кроме того, замените = + на + =. Если желаемый результат:

для размера = 2

** 

** 

для размера = 3

*** 

*** 

, то ваш код может быть таким:

#include<iostream> 
using namespace std; 

string myfunct(int thelength) 
{ 
    string s1; 
    for (int i=1;i<=thelength;i++) 
    { 
     s1 += " * "; 
    } 
    return s1; 
} 

int main() 
{ 
    cout << "Enter no of stars: "; 
    int size; 
    cin >> size;   

    cout << myfunct(size) << endl; 
    cout << endl; 
    cout << myfunct(size) << endl; 
} 
+0

в этом коде не будет разрыва строки – deeiip

+0

dev ++ давал мне разрешение отклонил извините, ребята – Froob

+0

@ me.deeiip, верно, вопрос изменился – cpp

4

Отвечая на оригинальный вопрос, в котором была запрошена функция, которая вернет строку wi th n asterisks, где n вводится вызывающим абонентом.

std::string имеет конструктор, который строит строку с N экземплярами данного символа:

std::string myfunct(int thelength) 
{ 
    return std::string(theLength, '*'); 
} 

Это возвращает строку, состоящую из theLength звездочек *.

+0

Кто дал -1? +1 для компенсации. – Mahesh

+1

@ Махеш Я сделал, например. Предоставленное решение не соответствует требованиям: у него нет места слева и справа. – IInspectable

+0

@ Невозможно было такого требования. – juanchopanza

1

Существующие ответы все делают это неправильно, вы хотите:

std::string asterisks(int n) { return std::string(n, '*'); } 
+0

За исключением моего ответа :) Который также получил вниз-проголосовал BTW. – juanchopanza

+0

«Неправильно» неточно. Субоптимально, да, но также преподавание ОП о циклах и областях. –

+0

@juanchopanza Да, я думаю, что мы ответили в то же время - не знаю, почему у вас было отказано, я поддержал его –

Смежные вопросы