目录
7-6 字符转换
本题要求提取一个字符串中的所有数字字符('0'……'9'),将其转换为一个整数输出。
输入格式:
输入在一行中给出一个不超过80个字符且以回车结束的字符串。
输出格式:
在一行中输出转换后的整数。题目保证输出不超过长整型范围。
输入样例:
free82jeep5
输出样例:
825
编译器:GCC
代码
#include<stdio.h>
int main()
{
char str[81]={0};
//全部初始化为0,防止输入字符串长度小于数组长度,多出剩余位置随机值的影响
//如果不进行初始化赋值,下面的for循环可以改成终止条件为str[i]!='\0',则可以避免多出剩余位置随机值的影响
gets(str);//输入字符串 gets函数会在末尾自动加'\0'的
int count = 0;
for (int i = 0; i<81; i++)//str[i]!='\0'
{
if (str[i] >= '0' && str[i] <= '9')
{
count = count*10 + str[i] - '0'; //字符数字与字符0的差值,即为该数字的整数形式
}
}
printf("%d", count); //输出结果
return 0;
}
7-7 输出大写英文字母
本题要求编写程序,顺序输出给定字符串中所出现过的大写英文字母,每个字母只输出一遍;若无大写英文字母则输出“Not Found”。
输入格式:
输入为一个以回车结束的字符串(少于80个字符)。
输出格式:
按照输入的顺序在一行中输出所出现过的大写英文字母,每个字母只输出一遍。若无大写英文字母则输出“Not Found”。
输入样例1:
FONTNAME and FILENAME
输出样例1:
FONTAMEIL
输入样例2:
fontname and filrname
输出样例2:
Not Found
编译器:GCC
代码
#include<stdio.h>
#include<string.h>
int main()
{
char a1[80];//未做处理的数组
char a2[80];//处理后的数组
gets(a1); //输入字符串
int k1 = strlen(a1);//计算a1的长度
int i;
int k2 = 0;
for(i=0; i<k1; i++){
if(a1[i]>='A'&&a1[i]<='Z'){
a2[k2] = a1[i];//将a1中大写字符取出,放到a2中
k2++;//下标k2加一
}
}
/*如果全为小写字母,a2数组不可能存储
那么K2不可能自增,会等于0;*/
if(k2 == 0){//如果全为小写的情况
printf("Not Found");
}
//此时a2数组中全部都是大写字母
//用0,1标记区别重复
//双重循环来检验,排序重复的字符
int m,j;
for(i=0; i<k2; i++){
m = 0;
for(j=0; j<i; j++){
if(a2[i] == a2[j]){
m = 1; //如果与之前的字符重复则置为1
}
}
if(m == 0){ //只输出不重复的字符
printf("%c",a2[i]);
}
}
return 0;
}
7-8 找最小的字符串
本题要求编写程序,针对输入的N个字符串,输出其中最小的字符串。
输入格式:
输入第一行给出正整数N;随后N行,每行给出一个长度小于80的非空字符串,其中不会出现换行符,空格,制表符。
输出格式:
在一行中用以下格式输出最小的字符串:
Min is: 最小字符串
输入样例:
5
Li
Wang
Zha
Jin
Xian
输出样例:
Min is: Jin
编译器:GCC
代码
#include<stdio.h>
#include<string.h>
int main()
{
int N;
char s[80];
char minS[80];
scanf("%d", &N);//输入数字
// 将最小的字符串先假设为第一个字符串
scanf("%s", s);//输入字符串
strcpy(minS, s); //使用strcpy,将字符串s赋值给字符串mins
// 继续输入剩下的N-1个字符串
for (int i = 1; i <= N - 1; i++)
{
scanf("%s", s);
// 如果新输入的字符串小于minS,则更新minS
if (strcmp(s, minS) < 0)//strcmp函数比较两个字符串大小
{
strcpy(minS, s); //赋值替换
}
}
printf("Min is: ");
puts(minS); //输出字符串
return 0;
}
7-9 找最长的字符串
本题要求编写程序,针对输入的N个字符串,输出其中最长的字符串。
输入格式:
输入第一行给出正整数N;随后N行,每行给出一个长度小于80的非空字符串,其中不会出现换行符,空格,制表符。
输出格式:
在一行中用以下格式输出最长的字符串:
The longest is: 最长的字符串
如果字符串的长度相同,则输出先输入的字符串。
输入样例:
5
li
wang
zhang
jin
xiang
输出样例:
The longest is: zhang
编译器:GCC
代码
#include<stdio.h>
#include<string.h>
int main()
{
int n;
scanf("%d", &n);//输入整数n
char str[n][80]; //字符串数组
int m, max = 0;
for (int i = 0; i < n; i++)
{
scanf("%s", &str[i]); //输入字符串
if (strlen(str[i]) > max) //strlen函数计算字符串长度并与max比较
{
max = strlen(str[i]);//max更新
m = i;//记录最长的下标
}
}
printf("The longest is: %s\n", str[m]);//输出最长的字符串
return 0;
}
7-10 字符串的冒泡排序
我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(<N),输出扫描完第K遍后的中间结果序列。
输入格式:
输入在第1行中给出N和K(1≤K<N≤100),此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。
输出格式:
输出冒泡排序法扫描完第K遍后的中间结果序列,每行包含一个字符串。
输入样例:
6 2
best
cat
east
a
free
day
输出样例:
best
a
cat
day
east
free
编译器:GCC
代码
#include<stdio.h>
#include<string.h>
int main()
{
int n,k,i,j;
scanf("%d %d",&n,&k);//输入两个整数
char data[n][11];//定义字符串数组
for(i=0;i<n;i++)
scanf("%s",data[i]);//使用字符串给字符串数组赋值
for(i=0;i<k;i++) //比较k遍
{
for(j=0;j<n-1-i;j++)
{
if(strcmp(data[j],data[j+1])>0)//strcmp函数比较字符串大小
{
char temp[11];
strcpy(temp,data[j]); //使用strcpy函数对字符串赋值,实现交换
strcpy(data[j],data[j+1]);
strcpy(data[j+1],temp);
}
}
}
for(i=0;i<n;i++)
printf("%s\n",data[i]);//字符串遍历输出
return 0;
}