問題是operator >>
在流中遇到空格字符時停止輸入字符串。您應該使用標準功能std::getline
。
考慮到要顯示一個字符串,不需要定義一個數組。該任務可以在不使用數組的情況下完成。
這是一個示範程序。
#include <iostream>
#include <string>
#include <limits>
#include <algorithm>
int main()
{
while (true)
{
std::cout << "Number of rows (0 - exit): ";
unsigned int rows;
if (not (std::cin >> rows) or (rows == 0)) break;
std::cout << "Number of columns (0 - exit): ";
unsigned int cols;
if (not (std::cin >> cols) or (cols == 0)) break;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "Type in text: (Enter - exit): ";
std::string text;
std::getline(std::cin, text);
if (text.empty()) break;
std::cout << std::endl;
std::string::size_type n = text.size();
n = std::min<std::string::size_type>(n, cols * rows);
for (std::string:: size_type i = 0; i < n; i++)
{
std::cout << text[i];
std::cout << ((i + 1) % cols == 0 ? '\n' : ' ');
}
std::cout << std::endl;
}
return 0;
}
它的輸出可能看起來像
Number of rows (0 - exit): 3
Number of columns (0 - exit): 4
Type in text: (Enter - exit): HarryPotter
H a r r
y P o t
t e r
Number of rows (0 - exit): 2
Number of columns (0 - exit): 6
Type in text: (Enter - exit): HarryPotter
H a r r y P
o t t e r
Number of rows (0 - exit): 6
Number of columns (0 - exit): 2
Type in text: (Enter - exit): HarryPotter
H a
r r
y P
o t
t e
r
Number of rows (0 - exit): 4
Number of columns (0 - exit): 4
Type in text: (Enter - exit): Antonella Masini
A n t o
n e l l
a M a
s i n i
Number of rows (0 - exit): 0
您可以替代這種說法
if (not (std::cin >> rows) or (rows == 0)) break;
對於這一說法
if (!(std::cin >> rows) || (rows == 0)) break;
如果編譯器不編譯的第一個語句。如果您使用MS VC++,那麼在項目的屬性中,您應該關閉使用語言擴展(C++,language),並且語句將被編譯。
如何定義可變文本?如果iif二維數組的總元素大於文本中的字符數,該怎麼辦? –
你也應該添加null終止到輸入文本的末尾 – Raindrop7
我懷疑['std :: getline'](http://en.cppreference.com/w/cpp/string/basic_string/getline)很快會在你的未來。 – WhozCraig