如何从字符串中每行输出一个单词

时间:2013-12-19 23:42:26

标签: c++ string visual-studio-2012 word

我一直在研究我的教授给我们一段时间的程序,我遇到了一个逻辑问题,因为我无法弄清楚如何做到这一点。我需要在用户输入的句子的每一行上输出一个单词。例如,用户输入“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");
}

然而,当我运行它时,程序基本上只输出相同的句子。还有其他方法可以做到这一点吗?非常感谢。

3 个答案:

答案 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; //*
}
  1. 您的原始代码执行以下逻辑。如果不是文件末尾输出当前字符。这样做确保你将\ n添加到每个单词的末尾(只是为了让你更容易调试!你可以随时修复它)
  2. 上述代码的逻辑就是这样做的。创建一个临时变量,我们将继续添加字母,直到找到空格字符。当我们找到一个空格字符时输出临时变量。并重置它直到句子结束然后在程序输出temp的结尾再次执行此操作,因为我们点击了行尾字符!