题目为:
手动输入一串字符(50 个字符以内)储存到字符数组
string1
中,可
包括大小写,标点符号等。
1)
输出字符串的有效长度,以及其全大写、全小写样式
(
需要创建新的字
符数组
string2
来实现字符串的复制与变化
)
。
2)
string1
按规律翻译成密码后并输出窗口。规律:第
i
个字母变成第(
26-i+1
)个字母(如
A->Z
、
b->y
),非字母字符不改动。
数组学习笔记:
1.stripy和strncpy函数一字符串复制函数, stripy(str1,str2)将字符串2复制到字符数组1中去。stripy(str,”China”)这样表示。
3.strncpy(str1,str2,2)将str2中最前面2个字符复制到str 1中,取代str1中原有最前2个字符。
4.strcmp函数一字符串比较函数,strcmp(srt1,str2)将两个字符串自左至右逐个字符相比(按ascii码值大小比较)直到出现不同的字符或遇到'/0 '为止。
5.strlen(str)计算字符串长度。
6.strlwr(str)转换为小写的函数。
7.strupr(str)转换为小写的函数。
8.memset函数 void *memset(void *s, int c, size_t n);
s:指向要填充的内存块的指针; 2. c:要被设置的值。该值以int形式传递,但是该函数会将其转换为unsigned char类型; 3. n:要被设置为c值的字节数。
例子:
可以使用memset函数来填充字符数组。比如我们有一个字符数组str,现在想将其全部设置为0,则可以这样写: char str[100];
memset(str, 0, sizeof(str));
这里sizeof(str)表示str数组所占用的总字节数。通过这种方式,我们可以快速地初始化一个字符数组。
#include <stdio.h>
#include <string.h>
int main() {
char string1[50];
char string2[50];
int length, i;
printf("请输入一个字符串(50个字符以内):");
scanf("%49s", string1); // 输入字符串,限制长度为49以防止越界
length = strlen(string1);
printf("字符串的有效长度为:%d\n", length);
// 复制字符串到string2
strcpy(string2, string1);
// 转换为全大写
for (i = 0; i < length; i++) {
if (string2[i] >= 'a' && string2[i] <= 'z')
{
string2[i] = string2[i] - 'a' + 'A';
}
}
printf("全大写样式:%s\n", string2);
// 清空string2,重新复制string1并转换为全小写
memset(string2, 0, sizeof(string2));
strcpy(string2, string1);
for (i = 0; i < length; i++) {
if (string2[i] >= 'A' && string2[i] <= 'Z')
{
string2[i] = string2[i] - 'A' + 'a';
}
}
printf("全小写样式:%s\n", string2);
//翻译成密码并输出窗口
for (i = 0; i < length; i++) {
if (string1[i] >= 'a' && string1[i] <= 'z') {
string1[i] ='z'- (string1[i] - 'a'); // b->y
}
else if (string1[i] >= 'A' && string1[i] <= 'Z') {
string1[i] = 'Z'- (string1[i] - 'A'); // A->Z
}
}
printf("翻译成密码后的字符串:%s", string1);
return 0;
}