输入一个字符串,将连续相同的字符删减为一个,以“*”结尾
#include <stdio.h>
void main(){
char ch_old, ch_new;
ch_old = '*';
do{
scanf("%c", &ch_new);
if (ch_old == ch_new)
continue;
ch_old = ch_new;
printf("%c", ch_old);
}while(ch_new != '*');
}
请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。比如字符串“abacacde”过滤结果为“abcde”。
要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串 lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
#include <stdio.h>
#include <string.h>
void main(){
char x[100],y[100];
void stringFilter(const char*pInputStr, long lInputLen, char *pOutputStr);
gets(x);
stringFilter(x,strlen(x),y);
puts(y);
}
//算法说明:将源字符串中每一个字符取出来,到目标字符串中查找存不存在,如果已经存在,则跳过,否则,复制到目标字符串最后一个字符的后面。
void stringFilter(const char*pInputStr, long lInputLen, char *pOutputStr){
long i,j,n;
for(i=0;i<100;i++)pOutputStr[i]=0;//将pOutputStr字符串各元素清0
for(i=0;i<lInputLen;i++){
n=strlen(pOutputStr);//求pOutputStr字符串长度
for(j=0;j<n;j++)
if(pOutputStr[j]==pInputStr[i]) break;//如果从pInputStr字符串中取出的第i个字符在pOutputStr字符串中已经存在
if(pOutputStr[j]==0)
pOutputStr[j]=pInputStr[i];
}
}
解法2
#include <stdio.h>
#include <string.h>
void finddd(char x[]);
int main(){
char a[150];
printf("请输入任意的字符串: ");
gets(a);
finddd(a);
return 0;
}
void finddd(char x[]) {
int i,shu=0;
char aa[100];
int aaa[200]={0};
for(i=0;i<strlen(x);i++){
if(aaa[ x[i] ] == 0){
aaa[ x[i] ] = 1;//标记已存在
aa[shu++]=x[i];//过滤后放到新数组里
}
}
aa[shu++]='\0';
printf("剔除重复字符后的字符串: %s\n",aa);
}
建立一个结构体包含学生信息(学号,成绩),使用结构体数组和结构体指针,输入200个学生信息,以成绩从低到高排序,输出最高成绩的学生的学号和成绩
(最高成绩可能有多名学生)
#include<stdio.h>
#define N 200
typedef struct Student{
int num;
int score;
}Stu;
int main(){
Stu stu[200],temp,*p,*q,*k;
int i,j,max = 0;
p = stu;
for(i = 0;i < N;i ++,p ++)
scanf("%d%d",&p->num,&p->score);
p = stu;
for(i = 0;i < N-1;i ++,p ++) {
k = p;
q = p + 1;
for(j = i + 1;j < N;j ++,q ++){ //选择排序
if(k->score > q->score){
k = q;
temp = *p;
*p = *k;
*k = temp;
}
}
}
p = stu;
for(i = 0;i < N;i ++,p ++)
if(p->score > max)
max = p->score;
p = stu;//指向起始点
for(i = 0;i < N;i ++,p ++)
if(p->score == max)//最高成绩可能有多名学生
printf("学号:%5d分数:%5d\n",p->num,p->score);
return 0;
}