思路:设置两个指针,一个指向字符串的开头(p
),一个指向末尾(q
)。当p<q
时,交换两个指针所指的字符,即可完成整个字符串的反转。
判断字符串的长度
判断字符串的长度可使用strlen
函数,使用前应引头文件string.h
。
字符串中的大小写转换
ASCII码中英文字母的大小写相差32,大写字母在前,小写字母在后,因此将大写字母全部转换为小写应当加32,反之应当加32。
#include<stdio.h>
#include<string.h>
#define LENGTH 50
void reverseStringUpper(char *p, char *q, int len) {
if ((p == NULL) || (q == NULL) || (len == 0))
return;
if (len == 1) {
*p = *p - 32;
return;
}
char temp;
//反转整个字符串
while (p < q) {
temp = *p - 32;
*p = *q - 32;
*q = temp;
p++;
q--;
}
return;
}
测试函数
void test1() { //测试句子
char a[LENGTH] = "I love programming";
int len = strlen(a);
reverseStringUpper(&a, &a[len - 1], len);
printf("%s\n", a);
}
void test2() { //测试单词
char a[LENGTH] = "programming";
int len = strlen(a);
reverseStringUpper(&a, &a[len - 1], len);
printf("%s\n", a);
}
void test3() { //测试单字母
char a[LENGTH] = "a";
int len = strlen(a);
reverseStringUpper(&a, &a[len - 1], len);
printf("%s\n", a);
}
void test4() { //测试空字符串
char a[LENGTH] = "";
int len = strlen(a);
reverseStringUpper(&a, &a[len - 1], len);
printf("%s\n", a);
}
void test5() { //测试空格
char a[LENGTH] = " ";
int len = strlen(a);
reverseStringUpper(&a, &a[len - 1], len);
printf("%s\n", a);
}
注意:reverseStringUpper函数中的指针设置为char型,因此调用时应使用&a和&a[len - 1],即某一个char型变量的地址。
int main() {
test1();
test2();
test3();
test4();
test5();
return 0;
}
运行结果: