1.字符串数组:
字符串实际上是使用 null 字符 '\0' 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。
(1)初始化的方法:1.char TheString[100] = {""};
2.char TheString[] = "";
(2)关于'\0':因为字符串数组是用null字符终止的一维数组,所以在字符串初始化的时候,为保证数组不越界,输入的字符数量应当是数组长度-1,否则由于\0的存在,会导致数组越界。
(3)字符串数组的中文输入:字符串中是可以输入中文的,每一个中文字符占2个字符的大小,当我们定义一个长度为10的字符串数组的时候,我们只能输入4个汉字(由于最后\0的存在)。当我们需要提出汉字字符串中的一个汉字的时候,需要用到循环提出汉字所占的那两个位的字符。
(4)字符串数组的输出:printf("%s",字符串数组名);
puts(字符串数组名)
(5)字符串数组的输入:scanf("%s",字符串数组名)//当我们使用%s的时候,后面的字符串数组名是不需要使用取地址符的。
gets(字符串数组名);
(6)二位字符串数组:二位字符串数组中可存放多个字符串,char String[3][10]={"1111","2222","3333"};调用的时候只需使用String[0]就可调用出此数组中的第一个字符串。
2.操作字符串的函数:
补充:memcpy(a,b,length);
memcmp(a,b,length);
作业题:
1.大(65-90)小(97-122)写字母互换
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
char TheString[80] = {""};
printf("请输入一个字符串:");
gets(TheString);
printf("你输入的字符串是:\n");
puts(TheString);
for(int i=0;i<80;i++){
if(TheString[i]>='A'&&TheString[i]<='Z'){
TheString[i]+=32;
continue;
}
if(TheString[i]>='a'&&TheString[i]<='z'){
TheString[i]-=32;
continue;
}
}
printf("互换后的字符串是:\n");
puts(TheString);
return 0;
}
2.统计各字符个数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
char TheString[255] = {""};
int i=0;
char temp;
printf("请输入一串字符以#结束!\n");
while(temp=getchar(),temp!='#'){
TheString[i] = temp;
i++;
}
puts(TheString);
int num=0,xiaoxie=0,daxie=0,qita=0;
for(int j=0;j<i;j++){
if(TheString[j]<='9'&&TheString[j]>='0'){
num++;
}
else if(TheString[j]<='z'&&TheString[j]>='a'){
xiaoxie++;
}
else if(TheString[j]<='Z'&&TheString[j]>='A'){
daxie++;
}
else{
qita++;
}
}
printf("数字:%d\n小写字母:%d\n大写字母:%d\n其他:%d\n",num,xiaoxie,daxie,qita);
return 0;
}
3.输入两行内容,第1行是原文(长度不超过200个字符),第2行包含以空格分隔的两个字符A和B,要求将原文中所有的字符A都替换成字符B,注意:区分大小写字母。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
char YuanWen[200]={""};
char greeting[] = "Hello";
gets(YuanWen);
puts(YuanWen);
char A,B;
printf("请输入两个字符,被替换的在前:\n");
scanf("%c %c",&A,&B);
for(int i=0;i<200;i++){
if(YuanWen[i]==A){
YuanWen[i]=B;
}
else{
continue;
}
}
puts(YuanWen);
puts(greeting);
return 0;
}
4.哥德巴赫猜想
#include<stdio.h>
#include<stdlib.h>
void Goldbach(int n);
int main() {
int t;
printf("请输入数字,输入0停止:\n");
scanf("%d", &t);
while (t!=0){
Goldbach(t);
scanf("%d", &t);
}
system("pause");
return 0;
}
void Goldbach(int n) {
int *a = (int *)malloc(n * sizeof(int));
int temp = 0;
if (n % 2 != 0||n<=2) {
printf("请输入一个偶数且大于2!\n");
}
else {
for (int i = 2; i <= n; i++) {
for (int j = 2; j <= i; j++) {
if (i%j == 0 && i != j) {
break;
}
if (i == j&&i%j == 0) {
a[temp] = i;
temp++;
}
}
}
}
for (int i = 0; i < temp; i++) {
int temp1;
temp1 = n - a[i];
for (int j = 0; j < temp; j++) {
if (temp1 == a[j]&&temp1<=a[i]) {
printf("%d=%d+%d\n", n, temp1, a[i]);
}
}
}
}