1.改写strcmp strcat。
①改写strcmp
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
char c[100] ="12345" ;
char c1[100] = "12";
int value = 0;
/* 实现strcmp(c,c1) */
for(int i=0;i<100;i++)
{
if(c[i] != c1[i])
{
value = c[i] - c1[i];
break;
}
if(c[i]=='\0' ||c1[i] == '\0' )//减少循环次数
{
value = c[i] - c1[i];
break;
}
}
printf("%d\n",value);
value = strcmp(c,c1);
printf("%d\n",value);
return 0;
}
运行结果
②改写strcat
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
/*实现strcat(c,c1)功能*/
char c[100] = "abc";
char c1[100] = "123";
int a = -1;
for(int i=0;i<100;i++)
{
if(c[i] == '\0')
if (c1[++a] != '\0')
c[i] = c1[a];
else
break;
}
printf("%s\n",c);
return 0;
}
运行结果
2.从终端获取一个字符串,判断该字符串中有几个小写字母,大写字母,数字字符
#include <stdio.h>
int main(int argc, const char *argv[])
{
char c[100] = "",temp;
int count_Big = 0,count_small = 0,count_num = 0;
printf("请输入一串字符我来为你统计大写字母,小写字母以及数字符个数(enter输入结束):\n");
for(int i=0;;i++)
{
temp = getchar();
if(temp == '\n')//不接收换行符
{
printf("输入结束\n");
break;
}
c[i] = temp;
}
for(int i=0;c[i]!='\0';i++)
{
if(c[i]>='A' && c[i]<='Z')
count_Big++;
else if(c[i]>='a' && c[i]<='z')
count_small++;
else if(c[i]>='0' && c[i]<='9')
count_num++;
}
printf("有%d个大写字母\n",count_Big);
printf("有%d个小写字母\n",count_small);
printf("有%d个数字\n",count_num);
return 0;
}
运行结果
3.从终端获取一个字符串,要求将该字符串倒置存储(创建一个新数组)
#include <stdio.h>
int main(int argc, const char *argv[])
{
char c[100] = "",new_c[100] = "",temp;
int i = 0,j,len;
printf("请输入一串字符我来为你倒置输出(enter输入结束):\n");
for(i;;i++)
{
temp = getchar();
if(temp == '\n')//不接收换行符
{
printf("输入结束\n");
break;
}
c[i] = temp;
}
/*输入完成后,i的值就是输入字符的个数*/
len = i;
for(j=0;j<i;j++)
{
new_c[j] = c[--len];
}
printf("%s倒置后:\n%s\n",c,new_c);
return 0;
}
运行结果
4.从终端获取一个字符串,要求删除字符串中的所有空格。(创建一个新数组)
#include <stdio.h>
int main(int argc, const char *argv[])
{
char c[100] = "",new_c[100] = "",temp;
int i = 0,j = -1;
printf("请输入一串字符我来为你删除所有空格(enter输入结束):\n");
for(int i=0;;i++)
{
temp = getchar();
if(temp == '\n')//不接收换行符
{
printf("输入结束\n");
break;
}
c[i] = temp;
}
for(i=0;c[++j]!='\0';)
{
if(c[j]!=' ')
{
new_c[i] = c[j];
i++;
}
}
printf("已为你删除所有空格:\n%s\n",new_c);
return 0;
}
代码结果
5.附加题:
①从终端获取一个字符串,要求在不新建新的数组的情况下,
将该字符串倒置存储。
#include <stdio.h>
int main(int argc, const char *argv[])
{
char c[100] = "",temp;
int i = 0,j = 1,len;
printf("请输入一串字符我会将他们倒置输出(enter输入结束):\n");
for(i;;i++)
{
temp = getchar();
if(temp == '\n')//不接收换行符
{
printf("输入结束\n");
break;
}
c[i] = temp;
}
/*输入完成后,i的值就是输入字符的个数*/
len = i-1;
i = 0;
for(;;)
{
if(i >= len)
break;
temp = c[i],c[i] = c[len],c[len] = temp;//值交换
i++;
len--;
}
printf("倒置后:%s\n",c);
return 0;
}
运行结果
②从终端获取一个字符串,要求在不新建新的数组的情况下,
删除字符串中的所有空格。
#include <stdio.h>
int main(int argc, const char *argv[])
{
char c[100] = "",temp;
int i = 0,len;
printf("请输入一串字符我来为你删除所有空格(enter输入结束):\n");
for(i;;i++)
{
temp = getchar();
if(temp == '\n')//不接收换行符
{
printf("输入结束\n");
break;
}
c[i] = temp;
}
len = 0;
for(i=0;c[i]!='\0';i++)
{
if(c[i] != ' ')
{
c[len++] = c[i];//len下标会停在空格位置,等i下标赋非空格值给他后,len下标+1
} //空格越少,i和len就越近,如果没有空格,i就等于len
//i下标负责遍历数组,并把非空格字符赋值给len下标的位置
}
c[len] = '\0';
printf("%s\n",c);
}
运行结果