📌  相关文章
📜  国际空间研究组织 | ISRO CS 2011 |问题 16(1)

📅  最后修改于: 2023-12-03 14:50:46.477000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2011 |问题 16

这是ISRO CS 2011考试中的第16个问题。下面是问题的内容和要求:

问题描述:请编写一个C程序,将一个给定的字符串转换为大写。

要求:必须使用指针和循环来完成此任务。

解决方案

以下是一个简单的C程序示例,它将接受一个字符串,并将其转换为大写。

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

void toUpperCase(char *);

int main() {
    char str[100];

    printf("Enter a string:\n");
    scanf("%[^\n]s", str);

    toUpperCase(str);

    printf("The uppercase string is: %s\n", str);

    return 0;
}

void toUpperCase(char *str) {
    int len = strlen(str);

    for (int i = 0; i < len; i++) {
        if (str[i] >= 'a' && str[i] <= 'z') {
            str[i] = str[i] - 32;
        }
    }
}

该程序使用了一个名为toUpperCase()的函数,该函数将接受一个字符串指针,并将字符串转换为大写。该程序先通过strlen()函数获取字符串的长度,然后使用一个for循环扫描字符串中的每个字符。如果字符是小写字母,则通过将ASCII值减去32来将其转换为大写字母。最后,程序通过printf()函数将结果输出到屏幕上。

为了使程序更加健壮,我们可以为指针变量添加const修饰符,以确保在函数内部不会更改指向的字符串。修改后的函数和程序如下:

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

void toUpperCase(const char *);

int main() {
    char str[100];

    printf("Enter a string:\n");
    scanf("%[^\n]s", str);

    toUpperCase(str);

    printf("The uppercase string is: %s\n", str);

    return 0;
}

void toUpperCase(const char *str) {
    int len = strlen(str);

    for (int i = 0; i < len; i++) {
        if (str[i] >= 'a' && str[i] <= 'z') {
            // 将字符强制转换为大写
            *(char *)(str + i) = (char)((int)str[i] - 32);
        }
    }
}

此程序的修改版本只是将参数中的char *改为了const char *,并在函数内部使用了类型强制转换。在程序的主函数中保持不变。