我正在编写一个接受包含书名作为参数的字符数组的函数,然后必须进行以下操作:
需要删除单词之间的额外空格[DONE] **
文本必须转换为标题大小写,即每个新单词必须以大写字母开头[DONE]
最后,我有一个文本文件(minors.txt),其中包含许多不应被该函数大写的单词,例如" a"和 ""但是我不知道如何实现这一点,任何有关如何实现的帮助 这将是非常感谢!
示例:
输入书的标题:简要介绍每个人的标题
正确输出:
一切的简史
这是我的代码:
bool Book :: convertToTitleCase(char* inTitle)
{
int length = strlen(inTitle);
bool thisWordCapped = false;
//Convert paramater to lower case and
//Remove multiple white spaces
for (int x = 0; x < length; x++)
{
inTitle[x] = tolower(inTitle[x]);
if (isspace(inTitle[x]) && isspace(inTitle[x+1]))
{
while (isspace(inTitle[x]) && isspace(inTitle[x+1]))
{
int i;
for (i = x + 1; i < length; i++)
{
if(i==(length-1))
{
inTitle[i] = '\0';
}
else
{
inTitle[i] = inTitle[i+1];
}
}
}
}
}
/* Read through text file and identify the words that should not be capitalized,
dont know how, please help! */
//Capitalize the first letter of each word
for (int i = 0; i < length; i++)
{
if ((ispunct(inTitle[i])) || (isspace(inTitle[i])))
{
thisWordCapped = false;
}
if ((thisWordCapped==false) && (isalpha(inTitle[i])))
{
inTitle[i] = toupper(inTitle[i]);
thisWordCapped = true;
}
}
return true;
}
我在想maby将文本文件中的单词读成字符串数组,然后比较两个数组以确保当文本文件中出现单词时,单词不是大写的,但是我不会#39 ; t知道字符串数组和字符数组之间是否可行。
我对于做什么或如何运作毫无头绪,感谢任何帮助,谢谢!
PS - 我还是比较新的C ++,所以请原谅效率低下的代码,
答案 0 :(得分:1)
最好将文件读入set
或unordered_set
,而不是数组 - 例如:
std::set<std::string> words;
if (std::ifstream in("minors.txt"))
{
std::string word;
while (in >> word)
words.insert(word);
}
else
{
std::cerr << "error reading minors.txt file\n";
exit(EXIT_FAILURE);
}
在程序开始时执行一次,然后在使用words.count(the_word)
大写单词之前查看是否需要大写。