我创建了一个程序,将英语单词转换为pig Latin(我班级的一部分)。目前它只转换一个单词:“hello” - >“elloyay”。
出于我自己的好奇心,我想让可能性读取由空格分隔的多个单词,然后相应地转换这些单词中的每一个。
从技术上讲,使用substr
在两个连续空格之间抓取一个单词。输入将被substr
分隔为单独的单词。我的make_pig_latin
解析器将解析一次中的每个单词,并将替换string array
中的相应单词。
例如:输入 “hello yellow fellow”将导致输出 “elloyay ellowyay ellowyay”
如果我完成此任务的编码在正确的轨道上,任何人都可以告诉我。我一直在运行时崩溃,我认为这是由于没有正确创建字符串数组。但我不完全确定。
任何帮助都将不胜感激。
int main()
{
string word;
string word_List[] = { word };
cout << "Enter your story (Please include spaces between each word): ";
getline(cin, word);
char c = word[0];
int i = 0;
int j = 0;
int k = i;
int l = 0;
while (i < (word.length() - 1))
{
if (word[i] = '\n')
{
string new_Word = word.substr(j, k);
string test_Pig = make_Pig_Latin(new_Word);
word_List[l] = test_Pig;
l == l + 1;
j == i + 1;
i == k + 1;
}
if (word[i] = '.')
{
i = word.length() + 1;
}
}
cout << "The Story In Pig Latin Is " << word_List << endl;
cin.ignore();
cin.get();
return EXIT_SUCCESS;
}
要添加的用户的额外信息:完整的错误行,使用的编译器+版本,使用的操作系统。
答案 0 :(得分:2)
if (word[i] = '\n')
会将word[i]
设置为'\n'
。您可能想要测试if(word[i] == '\n')...
但是,您当时正在输入一行,中间没有新行。
您可以通过测试空格if(word[i] == ' ')...
碰巧有一种更简单的方法。使用std::stringstream
提取单词。使用std::vector
来生成字符串数组(或向量)。例如:
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
int main()
{
std::string sentence = "How do you add strings to an array of strings";
std::vector<std::string> vs;
std::stringstream iss(sentence);
std::string word;
while (std::getline(iss, word, ' '))
vs.push_back(word);
for (auto wrd : vs)
cout << wrd << "\n";
return 0;
}