C ++ towlower与原始字符的比较失败了吗?

时间:2017-04-21 11:30:40

标签: c++ comparison special-characters tolower

我在C ++中有以下代码:

string StringTest = "Test";
bool OriginalWord = true;
for (unsigned int i = 0; i < StringTest(); i++) {
    string Character = towlower(StringTest[i]);
    string CharacterOriginal = StringTest[i];
    if (Character != CharacterOriginal) {
        //t vs. T should trigger false, but never happens?
        //e vs. e should trigger true
        //s vs. s should trigger true 
        //t vs. t should trigger true
        OriginalWord = false;
        }
    }

请注意,我使用towlower代替tolower

这总会导致OriginalWord=true情况。但是,例如测试应该给我回OriginalWord=false。因为towlower(T)会导致t和CharacterOriginal = T,这意味着它们不一样,因此OriginalWord=false

我做错了什么?我想它必须对towlower函数

做一些事情

3 个答案:

答案 0 :(得分:0)

类型转换遇到了一些问题,它们不会使用更严格的编译器标志。请参阅下面代码片段中的注释:

string StringTest = "Test";
bool OriginalWord = true;
for (unsigned int i = 0; i < StringTest.size(); i++) 
// do you mean StringTest.size() instead of StringTest()?
{
    wint_t Character = towlower(StringTest[i]);
    wint_t CharacterOriginal = StringTest[i];
// can't convert a char to a string (or const char *)
// did you meant to use wint_t instead of string?
    if (Character != CharacterOriginal) 
    {
        //t vs. T should trigger false, but never happens?
        //e vs. e should trigger true
        //s vs. s should trigger true 
        //t vs. t should trigger true
        OriginalWord = false;
    }
}

答案 1 :(得分:0)

好, 你的代码有些麻烦, 第一:

string StringTest = "Test"; // you created StringTest as a single variable
 //in the next steps you use it all the time as a array, lets change that.

int count = 10;
string StringTest[count] = { "Test", "test","Test", "test","Test", "test","Test", "test","Test", "test" };

for (unsigned int i = 0; i < StringTest(); i++) // you must use the size of string so:
for (unsigned int i = 0; i < count; i++) 

答案 2 :(得分:-1)

string Character false usage ,它必须是char因为 tolower 返回int(char)而不是字符串。 也是为了获得字符串的长度 - &gt; 。StringTest的尺寸()

编辑后的代码在这里!

string StringTest = "Test";
bool OriginalWord = true;
for (unsigned int i = 0; i < StringTest.size(); i++) {
    char Character = tolower(StringTest[i]);
    char CharacterOriginal = StringTest[i];
    if (Character != CharacterOriginal) {
        OriginalWord = false;
    }
}