如何将我从外部文件中的函数获得的字符串转换为全部大写[重复]

Posted

技术标签:

【中文标题】如何将我从外部文件中的函数获得的字符串转换为全部大写[重复]【英文标题】:How do I convert a string I get from a function from an external file to all upper case [duplicate] 【发布时间】:2015-11-15 00:58:50 【问题描述】:

我正在编写一个程序,可以计算一个单词在外部文件中出现的次数。要搜索的单词也在外部文件中,但我能够很好地检索这些单词。我意识到,如果单词完全匹配,它只会更新 count 的值。因此,例如,如果我正在搜索单词“School”并且单词“school”在文本文件中,我认为 count 的值不会改变。我还认为,如果要搜索的单词是“SCHOOL”并且文本文件中的单词是“school”,则计数不会改变。那么如何编辑我的 if 语句,以便例如单词“school”匹配“SCHOOL”和“School”?

这是我的主要功能:

#include <iostream>
#include "ReadWords.h"
#include "Writer.h"
#include <cctype>
#include <string>

using namespace std;


int main() 

    int x = 9;


    int count = 0;
    int count0;
    int count1;
    int count2;
    int count3;
    int count4;
    int count5;
    int count6;
    int count7;
    int count8;
    int count9;


    int scount;
    const int size = 10;
    string word_search[size];
    string word;

    cout << "Please enter a filename: " << flush;

    char filename[30];
    cin >> filename;
    ReadWords reader(filename);



    while (reader.isNextWord())
        count = count + 1;
        reader.getNextWord();


    


    cout << "There are: " << count << " words in the play" << endl;


    cout << "Please enter the name of the file with the search words: " << flush;

    char filename1[30];
    cin >> filename1;
    ReadWords reader1(filename1);

    scount = 0;
    while (reader1.isNextWord()) 

        word_search[scount] = reader1.getNextWord();
        ++scount;

    

    cout << "" << endl;

    while (reader.isNextWord()) 

这是我尝试将输入转换为大写以查看单词是否与自身的大写版本匹配的地方,但这不起作用。这里我还需要检查如果第一个字母是大写的话,这个词是否与自己匹配?

        if (reader.getNextWord() == word_search[0] || toupper(reader.getNextWord()) == word_search[0]) 
            count0 = count0 + 1;
        
        if (reader.getNextWord() == word_search[1]) 
                count1 = count1 + 1;
            

        if (reader.getNextWord() == word_search[2]) 
                count2 = count2 + 1;
            
        if (reader.getNextWord() == word_search[3]) 
                count3 = count3 + 1;
            
        if (reader.getNextWord() == word_search[4]) 
                count4 = count4 + 1;
            
        if (reader.getNextWord() == word_search[5]) 
                count5 = count5 + 1;
            
        if (reader.getNextWord() == word_search[6]) 
                count6 = count6 + 1;
            
        if (reader.getNextWord() == word_search[7]) 
                count7 = count7 + 1;
            
        if (reader.getNextWord() == word_search[8]) 
                count8 = count8 + 1;
            
        if (reader.getNextWord() == word_search[9]) 
                count9 = count9 + 1;
            


    


    cout << "Please enter the name of the file to write to: " << flush;

    char filename2[30];
    cin >> filename2;
    Writer reader2(filename2);
    cout << "File has been written too.." << endl;

    reader2.writeInt(count);
    reader2.writeString("Hello my name is Joshua Ogunnote");

    return 0;

这是一个单独的文件,其中声明了我的一些函数:

#include "ReadWords.h"
#include <cstring>
#include <iostream>
using namespace std;


void ReadWords::close()
    wordfile.close();



ReadWords::ReadWords(const char *filename) 


        wordfile.open(filename);

        if (!wordfile) 
            cout << "could not open " << filename << endl;
            exit(1);
        


string ReadWords::getNextWord() 

    string n;


    if(isNextWord())
        wordfile >> n;


        int len = n.length();
        for(int i = 0; i < len ; i++) 


            if (ispunct(n[i]))

                    
                        n.erase(i--, 1);
                        len = n.length();
                    
        
            cout << n << endl;
        return n;

    



bool ReadWords::isNextWord() 

        if (wordfile.eof()) 
            return false;
        
        return true;

【问题讨论】:

请使用a Minimal, Complete, and Verifiable example 当你有许多变量同名但只有一个 id 号不同时,这提示你应该使用数组和循环。 【参考方案1】:

如果你只是使用英语,一个简单的 tolower() 转换就可以了。

std::string tolower( std::string s )

  for (char& c : s) c = std::tolower( c );
  return s;

现在你可以比较它们了:

if (tolower( "Hello" ) == tolower( "HELLO" ))

如果您使用 Unicode,您应该对文本执行称为 大小写折叠 的转换,并比较生成的字符串数据。

【讨论】:

是的,如果我真的有字符串,那会起作用,但是我从外部文件中获取字符串,所以我不知道如何准确地应用你的逻辑

以上是关于如何将我从外部文件中的函数获得的字符串转换为全部大写[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python如何n-1个数是小写然后全部转换为小写

如何使用php和文件上传将图像转换为二进制字符串?

如何将python转换为exe而不保存在exe文件中的字符串? [关闭]

在 Windows Phone 和 Silverlight 中将 Image Feed 转换为 BitmapImage

如何将我的十六进制字符串转换为数字? [复制]

python如何定义函数将小写转换为大写