📅  最后修改于: 2023-12-03 14:50:46.477000             🧑  作者: Mango
这是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 *
,并在函数内部使用了类型强制转换。在程序的主函数中保持不变。