首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文本文件中读取的代码,删除停止字,然后应用案例折叠。

从文本文件中读取的代码,删除停止字,然后应用案例折叠。
EN

Stack Overflow用户
提问于 2013-12-05 19:36:20
回答 2查看 2K关注 0票数 1

我编写了这段代码,它读取一个名为示例.text的文本文件

代码语言:javascript
复制
I LOVE C++ 
THE CAR IS BLUE

然后从它中删除停止词,然后应用大小写折叠(将所有字母转换为小写),当我运行程序时,最后一个单词(蓝色)被打印了两次,我不知道为什么!

代码语言:javascript
复制
#include <iostream> 
#include <cmath>
#include <fstream> 
#include <cstdlib> 
#include <cstring> 
using namespace std; 
void ChangeCase(char word[]) 
{ 
    for(size_t i = 0; i < strlen(word); i++) 
    { if( isupper(word[i])) word[i] = tolower(word[i]); 
    } }
    int main()
    { char filename[50]; 
    ifstream example; 
    cin.getline(filename , 50); 
    example.open("example.txt"); 
    if(!example.is_open())
    { 
        exit(EXIT_FAILURE); 
        } char word[50]; 
        example>>word; 
        while (example.good()) 
        { 
            if (std::strcmp(word, "a") != 0 &&std::strcmp(word, "able") != 0 &&std::strcmp(word, "about") != 0 &&std::strcmp(word, "across") != 0 &&std::strcmp(word, "after") != 0 &&std::strcmp(word, "all") != 0 &&std::strcmp(word, "almost") != 0 &&std::strcmp(word, "also") != 0 &&std::strcmp(word, "am") != 0 &&std::strcmp(word, "among") != 0 &&std::strcmp(word, "an") != 0 &&std::strcmp(word, "and") != 0 &&std::strcmp(word, "any") != 0 &&std::strcmp(word, "are") != 0 &&std::strcmp(word, "as") != 0 &&std::strcmp(word, "at") != 0 &&std::strcmp(word, "be") != 0 &&std::strcmp(word, "because") != 0 &&std::strcmp(word, "been") != 0 &&std::strcmp(word, "but") != 0 &&std::strcmp(word, "by") != 0 &&std::strcmp(word, "can") != 0 &&std::strcmp(word, "cannot") != 0 &&std::strcmp(word, "could") != 0 &&std::strcmp(word, "dear") != 0 &&std::strcmp(word, "did") != 0 &&std::strcmp(word, "do") != 0 &&std::strcmp(word, "dose") != 0 &&std::strcmp(word, "either") != 0 &&std::strcmp(word, "else") != 0 &&std::strcmp(word, "ever") != 0 &&std::strcmp(word, "every") != 0 &&std::strcmp(word, "for") != 0 &&std::strcmp(word, "from") != 0 &&std::strcmp(word, "get") != 0 &&std::strcmp(word, "got") != 0 &&std::strcmp(word, "had") != 0 &&std::strcmp(word, "has") != 0 &&std::strcmp(word, "have") != 0 &&std::strcmp(word, "he") != 0 &&std::strcmp(word, "her") != 0 &&std::strcmp(word, "hers") != 0 &&std::strcmp(word, "him") != 0 &&std::strcmp(word, "his") != 0 &&std::strcmp(word, "how") != 0 &&std::strcmp(word, "however") != 0 &&std::strcmp(word, "i") != 0 &&std::strcmp(word, "if") != 0 &&std::strcmp(word, "into") != 0 &&std::strcmp(word, "is") != 0 &&std::strcmp(word, "it") != 0 &&std::strcmp(word, "its") != 0 &&std::strcmp(word, "just") != 0 &&std::strcmp(word, "least") != 0 &&std::strcmp(word, "let") != 0 
&&std::strcmp(word, "like") != 0 &&std::strcmp(word, "likely") != 0 &&std::strcmp(word, "may") != 0 &&std::strcmp(word, "me") != 0 &&std::strcmp(word, "might") != 0 &&std::strcmp(word, "most") != 0 &&std::strcmp(word, "must") != 0 &&std::strcmp(word, "my") != 0 &&std::strcmp(word, " neither ") != 0 &&std::strcmp(word, "no") != 0 &&std::strcmp(word, "nor") != 0 &&std::strcmp(word, "not") != 0 &&std::strcmp(word, "of") != 0 &&std::strcmp(word,"“off") != 0 &&std::strcmp(word, "often") != 0 &&std::strcmp(word, "since") != 0 &&std::strcmp(word, "so") != 0 &&std::strcmp(word, "some") != 0 &&std::strcmp(word, "than") != 0 &&std::strcmp(word, "that") != 0 &&std::strcmp(word, "the") != 0 &&std::strcmp(word, "their") != 0 &&std::strcmp(word, "them") != 0 &&std::strcmp(word, "then") != 0 &&std::strcmp(word, "the") != 0 &&std::strcmp(word, "there") != 0 &&std::strcmp(word, "these") != 0 &&std::strcmp(word, "they") != 0 &&std::strcmp(word, "this") != 0 &&std::strcmp(word, "tis") != 0 &&std::strcmp(word, "to") != 0 &&std::strcmp(word, "too") != 0 &&std::strcmp(word, "twas") != 0 &&std::strcmp(word, "us") != 0 &&std::strcmp(word, "wants") != 0 &&std::strcmp(word, "was") != 0 &&std::strcmp(word, "we") != 0 &&std::strcmp(word, "were") != 0 &&std::strcmp(word, "what") != 0 &&std::strcmp(word, "when") != 0 &&std::strcmp(word, "where") != 0 &&std::strcmp(word, "which") != 0 &&std::strcmp(word, "while") != 0 &&std::strcmp(word, "who") != 0 &&std::strcmp(word, "whom") != 0 &&std::strcmp(word, "why") != 0 &&std::strcmp(word, "will") != 0 &&std::strcmp(word, "with") != 0 &&std::strcmp(word, "would") != 0 &&std::strcmp(word, "yet") != 0 &&std::strcmp(word, "you") != 0 &&std::strcmp(word, "your") != 0 &&std::strcmp(word, "on") != 0 &&std::strcmp(word, "only") != 0 &&std::strcmp(word, "or") != 0 &&std::strcmp(word, "other") != 0 &&std::strcmp(word, "our") != 0 &&std::strcmp(word, "own") != 0 &&std::strcmp(word, "rether") != 0 &&std::strcmp(word, "said") != 0 &&std::strcmp(word, "say") != 0 &&std::strcmp(word, "says") != 0 &&std::strcmp(word, "she") != 0 &&std::strcmp(word, "should") != 0 &&std::strcmp(word, "whom") != 0 &&std::strcmp(word, "why") != 0 &&std::strcmp(word, "will") != 0 
&&std::strcmp(word, "with") != 0 &&std::strcmp(word, "would") != 0 &&std::strcmp(word, "yet") != 0 &&std::strcmp(word, "you") != 0 &&std::strcmp(word, "your") != 0 ) 
cout<<word<<" ";
example>>word; 
ChangeCase(word); 
} ChangeCase(word); 
cout << word; 

system("PAUSE");
return 0; }
EN

回答 2

Stack Overflow用户

发布于 2013-12-05 19:49:39

更改:

代码语言:javascript
复制
example >> word;
while (example.good())
{
     // ...
     example >> word;
}

代码语言:javascript
复制
while (example >> word)                                                        /*
       ^^^^^^^^^^^^^^^                                                         */
{
    // ...
}

您需要在检查流之前进行提取。如果相反,即使流没有检查提取是否有效,循环也会运行(它只检查前面的提取是否有效)。

票数 0
EN

Stack Overflow用户

发布于 2013-12-05 19:51:24

你确实把最后一个字输出了两次。考虑下面的代码片段

代码语言:javascript
复制
        while (example.good()) 
        { 
            if (std::strcmp(word, "a") != 0 &&std::strcmp(word, "able") != 0 &&std::strcmp(word, "about") != 0 &&std::strcmp(word, "across") != 0 &&std::strcmp(word, "after") != 0 &&std::strcmp(word, "all") != 0 &&std::strcmp(word, "almost") != 0 &&std::strcmp(word, "also") != 0 &&std::strcmp(word, "am") != 0 &&std::strcmp(word, "among") != 0 &&std::strcmp(word, "an") != 0 &&std::strcmp(word, "and") != 0 &&std::strcmp(word, "any") != 0 &&std::strcmp(word, "are") != 0 &&std::strcmp(word, "as") != 0 &&std::strcmp(word, "at") != 0 &&std::strcmp(word, "be") != 0 &&std::strcmp(word, "because") != 0 &&std::strcmp(word, "been") != 0 &&std::strcmp(word, "but") != 0 &&std::strcmp(word, "by") != 0 &&std::strcmp(word, "can") != 0 &&std::strcmp(word, "cannot") != 0 &&std::strcmp(word, "could") != 0 &&std::strcmp(word, "dear") != 0 &&std::strcmp(word, "did") != 0 &&std::strcmp(word, "do") != 0 &&std::strcmp(word, "dose") != 0 &&std::strcmp(word, "either") != 0 &&std::strcmp(word, "else") != 0 &&std::strcmp(word, "ever") != 0 &&std::strcmp(word, "every") != 0 &&std::strcmp(word, "for") != 0 &&std::strcmp(word, "from") != 0 &&std::strcmp(word, "get") != 0 &&std::strcmp(word, "got") != 0 &&std::strcmp(word, "had") != 0 &&std::strcmp(word, "has") != 0 &&std::strcmp(word, "have") != 0 &&std::strcmp(word, "he") != 0 &&std::strcmp(word, "her") != 0 &&std::strcmp(word, "hers") != 0 &&std::strcmp(word, "him") != 0 &&std::strcmp(word, "his") != 0 &&std::strcmp(word, "how") != 0 &&std::strcmp(word, "however") != 0 &&std::strcmp(word, "i") != 0 &&std::strcmp(word, "if") != 0 &&std::strcmp(word, "into") != 0 &&std::strcmp(word, "is") != 0 &&std::strcmp(word, "it") != 0 &&std::strcmp(word, "its") != 0 &&std::strcmp(word, "just") != 0 &&std::strcmp(word, "least") != 0 &&std::strcmp(word, "let") != 0 
&&std::strcmp(word, "like") != 0 &&std::strcmp(word, "likely") != 0 &&std::strcmp(word, "may") != 0 &&std::strcmp(word, "me") != 0 &&std::strcmp(word, "might") != 0 &&std::strcmp(word, "most") != 0 &&std::strcmp(word, "must") != 0 &&std::strcmp(word, "my") != 0 &&std::strcmp(word, " neither ") != 0 &&std::strcmp(word, "no") != 0 &&std::strcmp(word, "nor") != 0 &&std::strcmp(word, "not") != 0 &&std::strcmp(word, "of") != 0 &&std::strcmp(word,"“off") != 0 &&std::strcmp(word, "often") != 0 &&std::strcmp(word, "since") != 0 &&std::strcmp(word, "so") != 0 &&std::strcmp(word, "some") != 0 &&std::strcmp(word, "than") != 0 &&std::strcmp(word, "that") != 0 &&std::strcmp(word, "the") != 0 &&std::strcmp(word, "their") != 0 &&std::strcmp(word, "them") != 0 &&std::strcmp(word, "then") != 0 &&std::strcmp(word, "the") != 0 &&std::strcmp(word, "there") != 0 &&std::strcmp(word, "these") != 0 &&std::strcmp(word, "they") != 0 &&std::strcmp(word, "this") != 0 &&std::strcmp(word, "tis") != 0 &&std::strcmp(word, "to") != 0 &&std::strcmp(word, "too") != 0 &&std::strcmp(word, "twas") != 0 &&std::strcmp(word, "us") != 0 &&std::strcmp(word, "wants") != 0 &&std::strcmp(word, "was") != 0 &&std::strcmp(word, "we") != 0 &&std::strcmp(word, "were") != 0 &&std::strcmp(word, "what") != 0 &&std::strcmp(word, "when") != 0 &&std::strcmp(word, "where") != 0 &&std::strcmp(word, "which") != 0 &&std::strcmp(word, "while") != 0 &&std::strcmp(word, "who") != 0 &&std::strcmp(word, "whom") != 0 &&std::strcmp(word, "why") != 0 &&std::strcmp(word, "will") != 0 &&std::strcmp(word, "with") != 0 &&std::strcmp(word, "would") != 0 &&std::strcmp(word, "yet") != 0 &&std::strcmp(word, "you") != 0 &&std::strcmp(word, "your") != 0 &&std::strcmp(word, "on") != 0 &&std::strcmp(word, "only") != 0 &&std::strcmp(word, "or") != 0 &&std::strcmp(word, "other") != 0 &&std::strcmp(word, "our") != 0 &&std::strcmp(word, "own") != 0 &&std::strcmp(word, "rether") != 0 &&std::strcmp(word, "said") != 0 &&std::strcmp(word, "say") != 0 &&std::strcmp(word, "says") != 0 &&std::strcmp(word, "she") != 0 &&std::strcmp(word, "should") != 0 &&std::strcmp(word, "whom") != 0 &&std::strcmp(word, "why") != 0 &&std::strcmp(word, "will") != 0 
&&std::strcmp(word, "with") != 0 &&std::strcmp(word, "would") != 0 &&std::strcmp(word, "yet") != 0 &&std::strcmp(word, "you") != 0 &&std::strcmp(word, "your") != 0 ) 
cout<<word<<" ";
example>>word; 
ChangeCase(word); 
} ChangeCase(word); 
cout << word; 

第一次在if语句的while循环中输出最后一个单词时。就是这里

代码语言:javascript
复制
if (std::strcmp(word, "a") != 0 /*...other conditions */ ) cout<<word<<" ";

第二次在循环之后输出最后一个单词

代码语言:javascript
复制
...
    } ChangeCase(word); 
    cout << word; 

问题是,当输入失败时,变量word的内容没有改变。它仍然等于“蓝色”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20408973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档