将小写字符串转换为大写字母?在C.

时间:2018-03-13 13:11:35

标签: c arrays string

我的教授用C语言给了我一些练习...在其中一个我必须将一个字符串作为参数传递给一个函数,这个函数将验证数组中是否存在小写字母并将其转换为上层案件信;

实际上有这样做的功能,但我不能使用string.h。

有人有想法吗?

void converterup(char palavra[])
{
    int i;

    for(i = 0; i < 10; i++)
    {
        if(palavra[i] != 'a')
        {
            palavra[i] == 'A';
        }
    }

会是这样的吗?

5 个答案:

答案 0 :(得分:1)

在使用函数<ctype.h>之前,您需要包含toupper,然后像下面的示例一样使用它(我编辑了您的代码,需要根据您的需要进行调整):

for(i = 0; i < 10; i++){
    palavra[i] = toupper(palavra[i]);
}

此循环将10个第一个字符转换为其上部ascii等价物

或者如果你不能使用标准函数,你可以使用这样的函数:

char myUpperChar(char x){
    const int delta = 'a' - 'A'; //'a' has ascii code 97 while 'A' has code 65
    if(x <= 'z' && x >= 'a'){
        x -= delta;
    }
    return x;
}

答案 1 :(得分:1)

如果某个字符位于“a”和“z”之间,您只需添加(“A” - “a”)即可将其转换为上限。

char input, output;
int diff = 'A' - 'a';

output = input;
if ('a' <= input && input <= 'z')
  output += diff;

return output;

答案 2 :(得分:1)

我猜你的教授在没有外部功能的情况下期待更基本的东西,比如说。

char str[] = "hello";
int len = sizeof(str) / sizeof(char);
int i;
for(i = 0; i < len; i++) {
    int ascii = str[i];
    if(ascii >= 97 && ascii <= 122) {// 97 => 'a' and 122 => 'z' in ascii
        str[i] = (char) (ascii - 32); // 32 is the ascii substraction of lower 
    }                             // and upper letters 'a' - 'A'
}

然后输出:

HELLO

答案 3 :(得分:0)

  

函数将验证是否存在小写字母   数组并将其转换为大写字母;

     

我不能使用string.h。

然后你必须自己做转换。看一下ASCII图表。 然后您可以注意到小写和大写字母相距0x400x40恰好是空格' ';

循环遍历数组并仅转换小写字母

arr[i] <= 'z' && arr[i] >= 'a'

请记住,小写和大写字母相距' '

arr[i] = arr[i] - ' ' ;

通过增加索引i++前进到数组中的下一个字符,并在遇到字符串arr[i]=='\0'的结尾时停止。

#include <stdio.h>

void converterup(char arr[])
{
    size_t i = 0;

    if(arr == NULL) return;

    while(arr[i]) // loop till the '\0'; this is equivalent to `arr[i]!='\0'`
    {
        if(arr[i] <= 'z' && arr[i] >= 'a'){
          arr[i] = arr[i] - ' ' ;
        }

        i++;
    }
}

int main(void)
{
    char str[] = "Hello World!";

    converterup(str);

    printf("%s",str);

    return 0;
}

测试:

HELLO WORLD! 

答案 4 :(得分:0)

查看我的代码人员,是否可以接受?

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

    void strupr(char palavra[])
    {
        int i;

        for(i = 0;palavra[i] > 60 && palavra[i] < 122; i++)
        {
            printf("%c", palavra[i] - 32);
        }
    }

    int main(void)
    {
        setlocale(LC_ALL, "");
        char palavra[10];

            printf("Insira uma palavra maiúsculas: "); gets(palavra);
            printf("Valor com conversão: ");
            strupr(palavra);


        return 0;
    }