我目前有点陷入困境。我需要用c ++编写一个程序,允许用户输入一个字符串(任意长度,任意数量的空格),然后程序需要对角表示。我可以让它工作,但仅限于第一个单词,而不是在第一个单词后输入的任何单词。您可以在下面找到我的代码。
谢谢大家!
#include <iostream>
#include <string>
using namespace std;
int main()
{
string strHello;
cin >> strHello;
for(int k = 0; k < strHello.length(); k++)
{
for (int x = 0; x <= k; x++)
{
if (k==x)
cout << strHello.at(x);
else
cout << " ";
}
cout << '\n';
}
return 0;
}
答案 0 :(得分:2)
是的问题与其他人提到的一样,>>
操作员停止阅读找到的第一个空格字符,因此std::getline()
完成工作,并且您不需要嵌套循环,看看这个
#include <iostream>
#include <string>
using namespace std;
int
main(void)
{
string text;
string spaces;
getline(cin, text);
for (int k = 0 ; k < text.length() ; ++k)
cout << (spaces += ' ') << text.at(k) << endl;
return 0;
}
答案 1 :(得分:1)
问题在于您的输入,而不是您的输出。问题是你只能打电话
cin >> strHello;
一次。这只读取第一个非空白字符序列,这些字符由任意数量的{空格,输入开始,输入结束}分隔。因此,您的程序只会读取任何输入的第一个这样的序列,并丢弃输入中的任何空格。
答案 2 :(得分:1)
cin >>
将以空白字符分隔输入字符串。您应该使用getline()
代替。
getline(cin,strHello);
答案 3 :(得分:1)
使用getline,例如
std::getline(cin, strHello);
cin
将只读取它在空格之前看到的第一个字符串。例如“你好世界”只会在strHello中打招呼。
答案 4 :(得分:0)
这是一个我认为有用的程序:
#include <iostream>
#include <string>
#define MAX_LEN 100
using namespace std;
int main()
{
char strHello[MAX_LEN] = { 0 };
cout << "Enter a string";
cin.getline(strHello, MAX_LEN);
for (int k = 0; k < sizeof(strHello); k++){
for (int x = 0; x <= k; x++){
if (k == x)
cout << strHello[x];
else
cout << " ";
}
cout << '\n';
}
return 0;
}