1

我正在尝试将 aa const.char 转换为该单词的小写版本。这是我目前拥有的代码:

int i=0;
char DuplicateArray[45];
int sizevalue=0;
Node* NodePointer=NULL;
unsigned int hashval=0;
int counter=0;
sizevalue=strlen (word);

strncpy(&DuplicateArray[counter], word,sizevalue);//word is the const char pointer.
DuplicateArray[sizevalue+1] = '\0';
hashval=hash(DuplicateArray);//function I call to determine hash value
while ( DuplicateArray[i] != '\0' )
{
    DuplicateArray[i] = tolower(DuplicateArray[i]);    
    i++;
}

但是,使用此代码,我无法使数组中的字符小写。有谁知道我做错了什么?

4

3 回答 3

2

我的猜测是,您要么误解了数组和&and[]运算符,要么代码中的其他各种“小”错误(据我所知,所有这些错误都会导致 UB)使您的程序行为异常。这有效

#include <string.h>
#include <stdio.h>

int main()
{
    const char* uppercase = "UpPeRcAsE";

    char duplicateArray[45];
    int uppercaseSize = strlen(uppercase);

    // copy uppercase into duplicateArray
    strncpy(duplicateArray, uppercase, uppercaseSize);

    duplicateArray[uppercaseSize] = '\0';
    int i = 0;
    while (duplicateArray[i] != '\0')
    {
        duplicateArray[i] = tolower(duplicateArray[i]);    
        i++;
    }

    printf("Before: %s, after: %s\n", uppercase, duplicateArray);

    return 0;
}
于 2013-03-06T07:39:16.583 回答
0

如果编码是 Ascii,则以二进制形式进行。区别在于第 6 位,大写字母为 0,小写字母为 1。您可以通过以十进制减去 32 或翻转第六位来轻松找到它。例如,字符 A 是 1000001 (0x41),字符 a 是 1100001 (0x61)。

于 2013-03-06T07:31:19.680 回答
-1

用这个

#include <stdio.h>
#include <ctype.h>

void dotolower(const char *cstr)
{
    char *str = (char*)cstr;

    while (*str) {
        *str = tolower(*str);
        ++str;
    }    
}

int main()
{
    char mystr[] = "HELLO";
    dotolower(mystr);
    puts(mystr);    

    return 0;
}

举个例子

于 2013-03-06T07:34:35.960 回答