题目一:
思路:首先要知道strcmp和strcat是干嘛的
改写strcmp,我们只需要比较每一位是否相等,如果不等就返回res,一直到最后同时到达'\0'则可以判断这两个字符串相等。
改写strcat,我们只需要找到str1字符串的'\0'位置然后把str2依次从'\0'位置放进去。最后要把'\0'也放进去,保证是一个字符串。
1).strcmp用来比较两个字符串的大小。
格式:
strcmp(str1,str2);若str1大于str2,则strcmp会返回大于0的数,若str1等于str2,则strcmp会返回0,若str1小于str2,则strcmp会返回小于0的数,当同时到达'\0'则两个字符串相等。
注意这个数其实是str1的某一位的ascii码减去str2的对应位的ascii码。
2).strcat用来连接字符串
格式:
strcat(str1,str2);将str2连接到str1的后面,str1会发生变化,但是str2不会变化
//strcmp的改写///
char arr[100],arr1[100]; //创建两个足够大的字符数组
gets(arr); //获取字符串
gets(arr1); //获取字符串
int res;
for(int i = 0;i<100;i++)
{
if(arr[i]!=arr1[i]){
res = arr[i]-arr1[i];
break;
}
else if(arr[i] == arr1[i] && arr[i] == '\0')
{
res = 0;
break;
}
}
printf("%d",res);
///strcat的改写///
char arr[100],arr1[100];
gets(arr); //获取字符串
gets(arr1);
int len = strlen(arr);
int len1 = strlen(arr1);
for(int i = 0;i<len1;i++){
arr[len++] = arr1[i];
}
arr[len] = '\0';
printf("%s",arr);
return 0;
题目二:
思路:遍历字符串,将每一位进行判断,是就对应+1。
char arr[100];
int da = 0,xiao = 0,num = 0; //大写,小写,数字的字符数量
gets(arr);
int len = strlen(arr);
for(int i =0;i<len;i++){
if(arr[i] >= 'a' && arr[i] <= 'z')
xiao++;
else if (arr[i] >='A' && arr[i]<='Z')
da++;
else if (arr[i]>='0'&& arr[i]<='9')
num++;
}
printf("大写字母数量=%d,小写字符数量为=%d,数字的字符数量%d ",da,xiao,num);
题目三:
思路1:创建一个新的字符数组然后将第一个数组的倒过来输入到新字符数组里面。完成字符串的逆置。
char arr[100];
gets(arr);
int len = strlen(arr)-1;
int len1 = len+1;
char arr1[100];
for(int i = 0;i<len1;i++){
arr1[i] = arr[len--];
}
printf("%s",arr1);
思路2:在不创建新的字符数组的前提下,进行倒置。通过交换算法,只要我们找到了最后一位和索引值就可以交换了。
char arr[100];
gets(arr);
int len = strlen(arr)-1;
int l = len+1;
char temp;
for(int i = 0;i<l/2;i++){ //交换只需要一半长度
temp = arr[i]; //交换算法
arr[i] = arr[len];
arr[len] = temp;
len--; //len放在最后再--
}
printf("%s",arr);
题目四:
思路1:创建一个新的字符数组去存储除了空格的其他字符。
char arr[100];
char arr1[100];
gets(arr);
int len = strlen(arr);
int j = 0;
for(int i =0;i<len;i++){
if(arr[i]!=' ')
arr1[j++] = arr[i];
}
arr1[j] = '\0'; //最后的'\0'也要一并带过来
printf("%s",arr1);
思路二:再不创建新的字符数组的前提下,去进行删除空格的操作。我们只需要将不是空格的往前移,实现一个覆盖的操作。在最后加上'\0'即可
char arr[100];
gets(arr);
int len = strlen(arr);
int index = 0;
for(int i=0;i<len;i++){
if(arr[i]!=' ')
arr[index++] = arr[i];
}
arr[index] = '\0'; //当空格遍历完之后index并不会++了
//所以我们直接让最后一位变成'\0'达到一个完整的字符串的效果
printf("%s",arr);
题目五:
杨辉三角
思路:就是一个循环遍历,首先让第一列全部变为1然后就可以进行下列计算操作
int arr [10][10]={0};
for(int i=0;i<10;i++){
for(int j=0;j<=i;j++){
if(j == 0){
arr[i][0] = 1;}
else{
arr[i][j] = arr[i-1][j-1]+arr[i-1][j];}
}
}
for(int i=0;i<10;i++){
for(int j=0;j<=i;j++){
printf("%d ",arr[i][j]);
}
printf("\n");