我一直在研究我的教授给我们一段时间的程序,我遇到了一个逻辑问题,因为我无法弄清楚如何做到这一点。我需要在用户输入的句子的每一行上输出一个单词。例如,用户输入“Hello World I'm Chris”并且程序需要输出: 你好 世界 我 克里斯
这是我到目前为止所做的:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string sentence;
int length;
cout << "Enter the sentence now." << endl;
getline(cin, sentence);
for(int i = 0; i < sentence.length(); i++)
{
if(sentence[i] != '\0')
{
cout << sentence[i];
}
else if(sentence[i] == '\0')
{
cout << endl;
}
}
system("pause");
}
然而,当我运行它时,程序基本上只输出相同的句子。还有其他方法可以做到这一点吗?非常感谢。
答案 0 :(得分:1)
根据this,\0
不代表空白。你似乎想要更像的东西:
[...]
if(sentence[i] == ' ') cout << endl; // check for whitespace
else cout << sentence[i];
[...]
顺便说一句,由于markdown格式化文本的方式,“每行一个字”的事情并不清楚,我不得不假冒编辑你的帖子,看看你究竟是什么意思。我认为使用代码标签可以解决这个问题。
答案 1 :(得分:0)
你的程序会输出相同的句子,因为你告诉它。
for(int i = 0; i < sentence.length(); i++)
{
if(sentence[i] != '\0') // If the current char is not the end,
{
cout << sentence[i]; // print the character.
}
else if(sentence[i] = '\0') // This should be "=="
{
cout << endl;
}
}
基本上,您将句子中的每个字母打印回std::cout
。
请在StackOverflow中搜索“C ++打印单词句子”,因为很多人都发布了有关此作业的问题。
编辑1:作业的基础
分配要求您从输入字符串中提取字母以形成单词。有很多方法可以做到这一点。搜索std::basic_string
课程的教科书或参考手册,看看哪些功能可以帮助您。
有些人从句子的第一个字母开始,搜索下一个不是字母的字符:
const char valid_letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
sentence.find_first_not_of(valid_letters);
他们使用返回的位置在两个位置之间获得子串(std :: string :: substr)。
另一种方法是使用循环。如果当前字符是字母,请附加到word
字符串。
再次搜索并查看您可以找到的示例。
答案 2 :(得分:0)
好的,首先,代码可以随意添加您之前输入的内容!
#include <iostream>
#include <string>
using namespace std;
int main()
{
string sentence = "Hello World";
int length;
string temp = "";
for(int i = 0; i < sentence.length(); i++)
{
temp += sentence[i];
if(sentence[i] == ' ')
{
cout << temp << "\n";
temp = "";
}
}
std::cout << temp;
return 0; //*
}