三个大写单词转换为首字母大写,其他都为小写,像这种代码应该怎么搞,拯救无奈学子吧
#include <stdio.h>
void Title(char *ch);
int main() {
char str[100];
printf("请输入字符串:");
fgets(str, 100, stdin);
Title(str);
printf("转换后的结果:%s", str);
return 0;
}
void Title(char *ch) {
int i = 0;
while (ch[i]) {
if (i == 0 && ch[i] >= 'a' && ch[i] <= 'z') {
ch[i] = ch[i] - 'a' + 'A';
}
else fi (i > 0 && ch[i] >= 'A' && ch[i] <= 'Z') {
ch[i] = ch[i] - 'A' + 'a';
}
i++;
}
}
这段代码是将全是大写字母组成的字符串,改为每个单词首字母大写其它小写,供参考:
#include <stdio.h>
void convert(char *str)
{
int i ,flg;
for (i = 0, flg = 1; str[i]; i++)
{
if (str[i] >= 'A' && str[i] <= 'Z') {
if (flg) { flg = 0; continue; }
str[i] += 32;
}
else if (str[i] == ' ')
flg = 1;
}
}
int main()
{
int i, flg;
char str[32] = { "ZHANG SAN" };
gets(str);
convert(str);
puts(str);
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: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;
}
运行结果: