字符串比较 - 替换Char数组中的Word

时间:2014-07-31 12:08:27

标签: c++ arrays string comparison compare

我正在编写一个接受包含书名作为参数的字符数组的函数,然后必须进行以下操作:

  1. 需要删除单词之间的额外空格[DONE] **

  2. 文本必须转换为标题大小写,即每个新单词必须以大写字母开头[DONE]

  3. 最后,我有一个文本文件(minors.txt),其中包含许多不应被该函数大写的单词,例如" a"和 ""但是我不知道如何实现这一点,任何有关如何实现的帮助 这将是非常感谢!

  4. 示例:

      

    输入书的标题:简要介绍每个人的标题

    正确输出:

      

    一切的简史

    这是我的代码:

    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 ++,所以请原谅效率低下的代码,

1 个答案:

答案 0 :(得分:1)

最好将文件读入setunordered_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)大写单词之前查看是否需要大写。