例题一:7-4 字符串字母大小写转换
👈题目要求
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
char s[35];
// while(gets(s)&&s[i]!='#'){
gets(s);
int n=strlen(s);
for(int i=0;i!='#';i++){//注意这里条件
// if(s[i]=='#'){
// continue;
// }
// else{
if(isalpha(s[i])){ // 是不是字母
if(islower(s[i])){
s[i]=toupper(s[i]);// 小写字母就转化成大写字母
}
else if(isupper(s[i])){
s[i]=tolower(s[i]);// 大写字母转换成小写字母
}
}
}
for(int i=0;i<n-1;i++){
printf("%c",s[i]);
} //审题发现不要求输出“#”所以改用循环不输出最后一个#
// puts(s);
return 0;
}
例题二:7-5 查找指定字符
注意这题1:如果有重复字符出现要用最大下标,所以我选择从后往前查找。2.因为要求查找完如果没有对应字符就要输出not found,而有对应字符要改变下标,所以这里用一个f来标记。
#include <stdio.h>
#include <string.h>
int main()
{
char c,s[85];
scanf("%c\n",&c);
gets(s);
int n=strlen(s),x=n-1,f=1;
for(int i=n-1;i>=0;i--){
if(s[i]==c){
f=1;
break;
}
else{
x--;
f=0;
}
}
if(f==0){
printf("Not Found");
}
else{
printf("index = %d",x);
}
return 0;
}
例题三:删除重复字符并按ASCII表顺序从小到大进行排序
思路就是把非重复的字符放进一个新的数组里然后再排序
//删除重复字符代码
#include <stdio.h>
#include <string.h>
int main()
{
char s[85],a[85]={0};
gets(s);
int n=strlen(s);
int N=0;// N是复制以后数组里的字符个数
for(int i=0;i<n;i++){
int k;
for(k=0;k<i;k++){
if(a[k]==s[i]){
break;
}
}
if(k==i){
a[N]=s[i];
N++;
}
}
puts(a);
return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
char s[85],a[85]={0};
gets(s);
int n=strlen(s);
int N=0;// N是复制以后数组里的字符个数
for(int i=0;i<n;i++){
int k;
for(k=0;k<i;k++){
if(a[k]==s[i]){
break;
}
}
if(k==i){
a[N]=s[i];
N++;
}
}
for(int i=0;i<N;i++){
for(int j=0;j<N-i-1;j++){
if(a[j]>a[j+1]){
char t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
puts(a);
return 0;
}
例题四:输出大写英文字母
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
char s[85],a[85]={0};
gets(s);
int n=strlen(s);
int f=0;
for(int i=0;i<n;i++){
if(isupper(s[i])){
a[i]=s[i];
f=1;
}
}
if(f==1){
puts(a);
}
else{
printf("Not Found");
}
return 0;
}
空格以后的大写字母不输出并且题目要求不能重复输出