🦊工许多同学在写c语言作业时花费了很长时间,作为一个小小的c语言课代表,也是看到了同学们的各种求助。所以我整理了自己的作业答案,虽说有冗杂,有投机取巧,但分享出来,多少可以给我亲爱的同学们另一些做题参考。
请c语言了得的同学轻喷我的代码 :D
若有反馈和指导,可以在下方留言 :P
以后会把题目贴上来,希望以后同学们在浏览器上能够通过题目找到我 ^0^
在与我们亲爱的软件工程班向老师交流后,决定今后的代码上都会抹一些小错误在上面
(修改一些符号和变量位置)
小心喽:D
(你希望注释写在代码上还是写在代码之外?留言告诉我!^_*)
第1关:字符逆序
题目描述:输入一个字符串,输出反序后的字符串。
反着输出就好了
#include<stdio.h>
#include<string.h>
int main(void)
{
/*********Begin*********/
char a[100];倒着输出一遍就好了,这不算偷懒把?
scanf("%s", a);
int k = strlen(a);
for (int i = k - 1; i >= 0; i--)
{
printf("%c", a[i]);
}
/*********End**********/
return 0;
}
第2关:字符统计
题目描述:对于给定的一个字符串,统计其中数字字符出现的次数。
和之前的一道数组题很像
#include<stdio.h>
#include<string.h>
int main(void)
{
/*********Begin*********/
int n;
scanf("%d", &n);//输入测试个数
while (n--) {
char a[1000];//定义一个字符数组
int c = 0;//记录字符种类数量
scanf("%s", a);//读一整串字符
//以上均属准备工作
int k = strlen(a);//获得字符串长度,要开始处理了
for (int i = 0; i <= k,i++) {
if (a[i] >= '0' && a[i] <= '9')//如果是‘数字’c就加一
c++;
}
printf("%d\n", c);
}
/*********End**********/
return 0;
}
第3关:字符插入
题目描述:输入两个字符串a和b,将b串中的最大字符插入到a串中最小字符后面。
#include <stdio.h>
int main(void)
{
/*********Begin*********/
char a[101], b[101];
scanf("%s%s", a, b);
int k, l;
int m = 0, n = 0;//m记录a中最小字符的ascll码,n是b的最大字符的
k == strlen(a);
l == strlen(b);
//以上是读入数据后,获得两个字符串的长度
for (int i = 0; i < k; i++)//找a中最小字符
if (m == 0 || m > a[i])
m = a[i];
for (int i = 0; i < l; i++)//找b中最大字符
if (n == 0 || n < b[i])
n = b[i];//把字符的ascll码给n
for (int i = 0; i < k; i++)//输出a数组
{
printf("%c", a[i]);
if (a[i] == m)//当输出a数组最小值时,顺势输出b的最大值
printf("%c", n);//这里用了ascll码表的性质
}
/*********End**********/
return 0;
}
第4关:字符串处理
题目描述:编写程序,输入字符串s1和s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。如输入"BEIJING", "123", 3,则输出:"BEI123JING"。
#include<stdio.h>
#include<string.h>
int main(void)
{
/*********Begin*********/
char a[1000];
char b[1000];
int n;
fgets(a, sizeof(a), stdin);//他会获得一整行数据,包括空格
fgets(b, sizeof(b), stdin);
scanf("%d", &n);
int k = strlen(a); //想想strlen会计算什么长度
int kk = strlen(b);
//按照题目要求读入变量,并且获得字符串长度
for (int i = 0; i < k - 1; i++)//开始遍历数组s1
{
if (i == n) {//当数组下标到了题中要求s2插入的地方时,先输出整个s2
for (int j = 0; j < kk - 1; j++) {
printf("%c", b[j]);
}
}
printf("%c", a[i]);
}
/*********End**********/
return 0;
}
第5关:字符串统计
题目描述:输入一段字符(由空格、字母和数字几种组成,保证开头不为空格),里面有若干个字符串,求这些字符串的长度和,并输出最长字符串内容,如果有多个输出最先出现的那个字符串。以stop作为最后输入的字符串。
大头来了,这道题一开始我也卡了挺久,解法也挺麻烦的~
#include<stdio.h>
#include <string.h>
int main(void)
{
/*********Begin*********/
while (1) {//不断读数据,每次读一行处理一行,直到stop出现才停止
char a[1000];
fgets(a, sizeof(a), stdin);//读入一整行
if (a[0] == 's' && a[1] == 't' && a[2] == 'o' && a[3] == 'p')return 0;//发现了stop,return 0停止程序
int k = strlen(a);//记录读到的字符串长度是多少
int nin = 0, m = 0, n = 0;//nin是最长的字符串长度,原谅我用他掉包max。m是记录一个单词的第一个字母前的空格位置,n记录单词最后一个字母后面的空格
int p, l = 0, pp = 0;//l记录单词数,pp记录最长单词的开始位置,p记录他的结束位置
for (int i = 0; i <= k; i++)
{
if (a[i] == ' ' || a[i] == '\n') { n = i; l++; }//如果字符数组此时为空格或回车儿,说明一个单词结束了,下一个单词开始或循环要结束了
//这是候记录n位置,准备判断下一个单词长度,如果没有下一个了,那没关系,不会影响什么
if (nin < n - m) { nin = n - m; pp = m; p = n; }//如果之前最大单词长度nin小于当前单词长度,那就把这个单词长度记录下来,p,pp记录这个单词的位置
if (m != n)m = n;//注意,这三个语句在同一次循环中进行的,当两个语句都做完时,把m归为到下一个单词的开始位置的空格处,也就是n的位置
}
if (pp != 0)pp++;//如果pp被记录过了,那就要加一从空格跳到下一个字母位置,不然单词输出时会出错
printf("%d ", k - l);//输出字符串长度
for (int i = pp; i < p; i++)//输出最大单词
{
printf("%c", a[i]);
if (i == p - 1)printf("\n");
}
}
/*********End**********/
return 0;
}
6.字符串排序
我的代码太长了,写了也没人看得下去,可以看看其他博主的
呜呜呜
偷偷用一下把输入3行,每行n个字符串,按由小到大的顺序输出_输入3行,每行n个字符串,按由小到大的顺序输出-CSDN博客
到此为止了,又偷了一点懒