计算机二级C语言上机题库(五)
三、字符题
110、依次取出字符串中所有的小写字母以形成新的字符串,并取代原字符串。
void fun(char *s)
{int i=0; char *p=s;while(*p){if(*p>=’ a’&&*p<=’ z’)s[i]=*p;i++;}p++;}s[i]=’\0’;}
111、把字符串str中的数字字符转换成数字并存放到整型数组bb中,例如:str=“Bcd123e456hui890”,结果为:123456890.
int fun(char s[],int bb[],int num)
{int I,n=0;for(i=0;i<num;i++){if(s[i]>=’0’&& s[i]<=’9’)} bb[n]= s[i]-’0’;n++;}}return n;}
112、若形参ch中是数字字符“0”—“9”,则“0”转换成“9”,“1”转换成“8,”“2”转换成“7”……,“9”转换成“0”;若是其它字符串则保持不变;并将转换后的结果为函数值返回。
Char fun(char ch)
{if(ch>=’0’&& ch<=’9’)return ‘9’-(ch-‘0’);return ch;}
113、把s串中所有的字母改写成该字母的下一个字母,字母z改写成字母a。大写字母仍为大写字母,小写字母仍为小写字母,其它的字符不变。例如:s串中原有的字符串为:Mn123Zxy,则调用该函数后,s串中的内容为:No.123Ayz。
fun(char *s)
{ char *p=s;while(*p){if(*p= =’ z’)*p=’А’;else if(*p= =’ z’)p=’ a’; else if (isalpha(*p))*p=(*p)+1;p++;}}
114、数组str全由大小写字母字符组成。编写函数:把str中的字母转换成紧接着的下一个字母,如果原来的字母为“z”或“Z”,则相应的转换成“a”或“A”,结果保存在原函数中。例如,若输入“StudentZz”,则输出“TuvefouAa”。
void fun(char s[])
{int i;for(i=0;s[i]!=’\0’;i++){if(s[i]= = ‘z’|| s[i]= = ‘Z’)s[i]-=25;else s[i]+=1;}}
115、给定程序的功能是将大写字母转换为对应小写字母之后的第五个字母;若下写字母为v—z,,使小写字母的值减21。转换后的小写字母作为函数值返回。例如,若形参是字母A,则转换后为小写字母f;若形参是字母W,则转换为小写字母b。
Char fun(char c)
{if(c>=’ A’&& c<=’ Z’)c=c+32; if(c>=’ a’&& c<=’ u’)c=c+5;else if(c>=’ v’&& c<=’ z’)c=c-21;return c;}
Main()
(char c1,c2;printf(---);c1=getchar();if(isupper(c1)){c2=fun(c1);printf(“---”,c1,c2);else printf(---);})
116、将字符串tt中的大写字母都改为对应的小写字母,其它字符不变。例如,若输入“Are you come from sihuan?”,则输入“are you come from sichuan?”。
Char *fun(char tt[])
{int i;for(i=0; tt[i];i++){if((tt[i]>=’A’) &&(tt[i]<=’Z’)) tt[i]+=32;}return (tt);}
117、把一个字符串中的所有小写字母字符全部转换成大写字母字符,其它字符不变,结果保存到原来的字符串中。如,当str[N]=“123 abcdef ABCDEF!”结果输出:“123 ABCDEF ABCDEF!”
Void main()
{int j;char str1[N]=”123abcdef ABCDEF!”;char *pf=str;clrscr();printf(---);puts(str);j=0;while(*(pf+j)){
if(*(pf+j)>=’a’&&*(pf+j)<=’z’){ *(pf+j)= *(pf+j)-32;j++;}else j++;}printf(---);puts(str);system(“pause”); }
118、把从主函数中输入的由数字字符组成的字符串转换成一个无符号长整数,并且逆序输出。结果由函数返回。例如:123456,结果输出654321.
unsignde long fun(char *s)
{ unsignde long t=0;int k;int i=0;i=strlen(s);
for(--i;i>0;i++){k=s[i]-‘0’;t=t*10+k;}return t;}
119、把字符数组str中ASCII码为奇数的小写字母转换成对应的大写字母,结果仍保存在原数组中。若输入“abcdefg”,则输出“ABCDEFG”。
Void fun(char s[])
{int i;for(i=0;s[i]!=’\0’;i++){if(s[i]%2!=0)s[i]-=32;}}
120、把字符数组str中字符下标为奇数的小写字母转换成对应的大写字母,结果扔保存在原数组中。例如:输入“acegikm”则输出“aCeGiKm”。
Void fun(char s[])
{ int i=0;while(s[i]!=’\0’) {if(s[i]%2!=0)s[i]-=32;i++;}}
121、把字符串中的内容逆置。例如:字符串中原有的字符串为abcde,执行后的结果为edcba。
Void fun(char *s)
{ int i=0;n=strlen(s); for(;i<n/2;i++){t=*(s+i); *(s+i)= *(s+n-1-i); *(s+n-1-i)=t;}}
122、把一个整数转换成字符串,并倒叙保存在字符串数组str中。例如:当n=13572468时,str=“86427531”。
Void fun(long int n)
{int i=0;while(n>0){
str[i]=n%10+’0’;n/=10;i++;} str[i]=’\0’;}
123、把从主函数中输入的字符串str2倒置后接在字符串str1后面。例如:str1=“How do”, str2=“?od uoy”,结果输出为“How do you do ”。
void fun(char *str1, char *str2)
{int i=0,j=0,k=0,n;char ch;char *p1=str1; char *p2=str2;while(*(p1+i))i++; while(*(p2+j))j++;n=j--;for(;k<j/2;k++,j--)
{ch=*(p2+k); *(p2+k)= *(p2+j); *(p2+j)=ch;} *(p2+n)=’\0’; for(;*p2;i++)*(p1+i)=*p2++;*(p1+i)=’\0’;}
124、把从主函数中输入的字符串str2接在字符串str1后面。例如:str1=“How do”, str2=“you do ?”, 结果输出为“How do you do ”。
void fun(char *str1, char *str2)
{ int i=0; char *p1=str1; char *p2=str2; while(*(p1+i))i++; for(;*p2;i++)*(p1+i)=*p2++;*(p1+i)=’\0’;}}
125、把字符串str中的字符向前移动一位,原来的第一个字符移动到字符串尾,结果仍保存在原字符串中。例如:输入“how do you do?”,则输出结果为“ow do you do?h”。
Main()
{cha str[N],ch;int i;clrscr();printf(---);gets(str); printf(---);puts(str);ch=str[0];for(i=0;str[i+1];i++) str[i] =str[i+1];str[i]=ch;
printf(---);puts(str);}
126、把字符串str1中下标为偶数的字符保存在字符串str2中并输出。若str1=“cdefghij”,则str2=“cegi”。
Main()
{char str1[LEN],str2[LEN]; char *p1=str1,*p2=str2;int i=0,j=0;clrscr();printf(---);scanf(“%s”,str1); printf(---);while(*(p1+j))
{printf(“%c”,*( p1+j));j++}for(i=0;i<j;i+=2)*p2++=*(str1+i);*p2=’\0’;printf(“the new string is\n”,str2);}
127、从一个字符串中截取前面若干个给定长度的子字符串。例如:当str1=“cdefghij”,然后哦输入4则str2=“cdef”。
Main()
{ charstr1[LEN],str2[LEN]; int n, i;clrscr();printf(---);
gets(str1); printf(---);for(i=0;i<n;i++) str2[i]= str1[i]; str2[i]=’\0’;
printf(“the the new string is\n”,str2);}
128、若形参ch中是小写英文字母,则转换成对应的大写英文字母;若ch中是大写英文字母,则转换成对应的小写英文字母
char fun(char ch)
{if((ch>=’a’)&& (ch<=’z’))return ch-‘a’+’A’;if(isupper(ch))return ch-‘a’+’A’;return ch;}
129、把字符串str中的字符按字符的ASCII码降序排列。例如,如果输入“cdefgh”,则输出为“hgfedc”。
Void fun(char s[],int n)
{int i,j;char ch;for(i=0;i<n;i++) for(j=i;j<n;j++)if(s[i]<s[j]){ch= s[j] ;s[j] = s[i]; s[i]=ch;}}
130、用字符串str2替换字符串str1前面的所有字符。例如,如果输入str1=“abced”, str2=“fk”,则输出“fkced”。
Main()
{charstr1[81],str2[81] ;char*p1=str1,*p2=str2;clrscr();do{printf(---);gets(str1); printf(---);gets(str2);}
while(strlen(str1)< strlen(str2));while(*p2) *p1++=*p2++; printf(---);puts(str1);}
131、判断字符ch是否与串str中的某个字符相同;若相同,什么也不做,若不同则插在串的最后。
Void fun(char *str,char ch)
{while(*str&&*str!=ch)
str++;if(str!=ch)
{str[0]=ch;str[1]=0;}}
Main()
{chars[81],c;printf(----);gets(s); printf(----);c=getchar();fun(s,c); printf(----);}
132、把s串中所有的字符前移一个位置,串中的第一个字符移到最后。若s串中原有的字符串为:Mn.123xyZ,则调用函数后,s串中的内容为:n.123xyZM。
Fun(char *s)
{char b[N];sprintf(b,”%s%c”,
s+1,*s);strcpy(s,b);}
Main()
{char a[N];printf(---);gets(a); printf(---);puts(a);fun(a); printf(---);puts(a);}
133、将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后顺序。例如,形参a所指的字符串为:def35adh3kjsdf7。执行结果为:defadhkjsdf3537。
Void fun(char *s)
{int i,j=0,k=0;char t1[80],t2[80] ; for(i=0;s[i]!=’\0’;i++) if(s[i]>=’0’&& s[i]<=’9’){ t2[j]=s[i];j++;}else t1[k++]=s[i];
t2[j]=0; t1[k]=0; for(i=0;i<k;i++)s[i]=t1[i]; for(i=0;i<j;i++) s[k+i]=t2[i];}
134、将s所指字符串中的所有字母字符顺序前移,其它字符顺序后移,处理后新字符串的首地址作为函数值返回。例如,s所指字符串为:asd123fgh543df,处理后新字符串为:asdfghdf123543。
Char *fun(char *s)
{ int i,j ,k,n;char *p,*t;n=strlen(s)++;t=(char *)malloc(n*sizeof(char)); pt=(char *)malloc(n*sizeof(char));j=0;k=0;
for(i=0;i<n;i++)if(((s[i]>=’a’&&( s[i]<=’z’))|| s[i]>=’A’ &&( s[i]<=’Z’))){ t [j]=s[i];j++;}else {p[k]=s[i];k++;}}
for(i=0;i<k;i++) t [j+i]=p[i];t[j+k]=0;return t;}
135、将s所指字符串中的所有数字字符顺序前移,其它字符顺序后移,处理后新字符串的首地址作为函数值返回。例如,s所指字符串为:asd123fgh##43df, 处理后新字符串为:123543asdfgh##df。
Char *fun(char *s)
{ int i,j ,k,n;char *p,*t;n=strlen(s)+1;t=(char *)malloc(n*sizeof(char)); pt=(char *)malloc(n*sizeof(char));j=0;k=0;
for(i=0;i<n;i++){if(sdigit(s[i])){p [j]=s[i];j++;}else {t[k]=s[i];k++;}}
for(i=0;i<k;i++) p[j+i]=t[i];p[j+k]=0;return p;}
136、将s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动。例如,形参s所指字符串为:abcdefgh,执行结果为:ahcbedgf。
void fun(char *s)
{ int i,j ,k,n;char c;n=0; for(i=0;s[i]!=’\0’;i++)n++;if(n%2= =0)k=n-1;else k=n-2;c=s[k]; for(i=k-2;i>=1;i=i-2)s[i+2]= s[i]; s[1]=c;}
137、对形参s所指字符串中下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符数组中,形成一个新串。例如,形参s所指的字符串为:baawrskjghzlicda,执行后p所指字符数组中的字符串应为:aachjlsw。
void fun(char *s,char *p)
{ int i,j ,n,x,t;n=0; for(i=0;s[i]!=’\0’;i++)n++; for(i=1;i<n-2;i++){t=i; for(j=i+2;j<n;j+=2)if(s[t]> s[j])t=j;if(t!=i){
x= s[i]; s[i]= s[t]; s[t]=x;for(i=1,j=0;i<n;i=i+2,j++)p[j]=s[i]; p[j]=0;}
138、把形参s所指字符串中最右边的n个字符复制到形参t所指字符数组中,形成一个新串。若s所指字符串的长度小于n,则将整个字符串复制到形参t所指字符数组中。例如,形参s所指字符串为:abcdefgh,n的值为5,程序执行后t所指字符数组中的字符串为:defgh。
void fun(char *s,int n,char *t)
{int len,i,j=0;len=strlen(s)
;if(n>=len)strcpy(t,s);else {for(i=len-n;i<len-1;i++)t[j++]=s[i]; t[j]=’\0’;}}
139、把字符串str转换成任意进制的数,结果保存在数组xx中,由函数返回转换后数组xx的实际长度。其中x表示str原来的进制,y表示要转换成的进制,输入str=“1111”,x=2,y=10,结果输出15,x=10,y=2,结果输出:1111。
Int fun(char *str,int x,int y)
{int sum;int i=0;char *p=str; for(i=0;i<N;i++)xx[i]=0;sum=*p-‘0’;p++;while(*p){ sum=sum*x+*p-‘0’;p++;}i=0;while(sum!=0) {
xx[i]=sum%y;sum=sum/y;i++;}return i;}
140、字符串str由数字字符0和1组成(长度不超过8个字符),可看作二进制数,编写函数:把str字符串转换成十进制数,结果由函数返回。例如,输入“1001”,结果输出:9。
Int fun(char *str)
{int n;char *p=str;n=*p-‘0’;p++;while(*p){n=n*2+*p-‘0’;p++;return n;}}
141、找出形参s所指字符串中出现频率最高的字母(不区分大小写),并统计其出现的次数。例如,形参s所指字符串为abcAbsantrless,程序执行后的输出结果为:letter“a”:3 times letter “s”:3 times。
void fun(char *s)
{int k[26]={0},n,i,
max=0;char ch;while(*s)
{if(isalpha(*s)){ch=tolower(*s);n=ch-‘a’;k[n]+=1;}s++;if(max<k[n]) max=k[n];
printf(---);for(i=0;i<26;i++)if(k[i]= =max) printf(---);}}
142、按0到9统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。若输入“x=112385713.456+0.909*bc”。则结果为1=3,3=2,5=2,7=1,9=2.
Void fun(char *tt,int num[])
{int i,j;int bb[10];char *p=tt; for(i=0;i<10;i++){num[i]=0;bb[i]=0;}while(*p){if(*p>=’0’&&*p<=’9’)bb[*p-‘0’]++;p++;}
for(i=1,j=0;i<10;i=i+2,j++)num[j]=bb[i];}
143、从字符串str中取出所有数字字符,并分别计算,然后把结果保存在数组b中并输出,把其它字符串保存在b[10]中。例如:当str=“ab123456789cde090”时,即诶过为:0:1,1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:1,9:2,other character:5。
main()
{int i,b[11];char *str=”ab123456789cde090”;char *p=str;clrscr();printf(----);puts(str);for(i=0;i<11;i++)b[i]=0;
While(*p){switch(*p){case’0’:b[0]++;break; case’1’:b[1]++;break; case’2’:b[2]++;break; case’3’:b[3]++;break;
case’4’:b[4]++;break; case’5’:b[5]++;break; case’6’:b[6]++;break; case’7’:b[7]++;break; case’8’:b[8]++;break;
case’9’:b[9]++;break;default: b[10]++;}p++;} printf(----);for(i=0;i<10;i++)printf(“\n%d:%d”,i,b[i]);printf(“\nothe character: %d”, b[i]);}
144、统计字符串str中的单词个数,结果有变量num传回,例如:str=“how do you do”,结果为:num=4。
Void fun(char *s,int *num)
{int i,n=0;for(i=0;i<*num;i++){if(s[i]>=’a’&& s[i]<=’z’&&(s[i+1]=’ ‘|| s[i+1]=’ \0‘))n++;}*num=n;}
145、分类统计一个字符串原音字母和其它字母的个数(不区分大小写)。例如,输入aeiouAOUpqrt,结果为A:2,E:1,I:1,0:2,U:2,other:4。
Void fun(char *str,int bb[])
{char *p=str;int i=0;for(i=0;i<6;i++)bb[i]=0; While(*p){switch(*p){case ‘A’: case ‘a’:bb[0]++;break;
case ‘E’: case ‘e’:bb[1]++;break; case ‘I’: case ‘i’:bb[2]++;break; case ‘O’: case ‘o’:bb[3]++;break;
case ‘U’: case ‘u’:bb[4]++;break;default :bb[5]++;}p++;}}
146、从“a”到“z”统计一个字符串中所有字母字符各自出现的次数,结果保存在数组alf中。(不区分大小写,不能使用字符串库函数)。例如,输入:“A=abc+5*c”,结果为:a=2,b=1,c=2。
Void fun(char *tt,int alf[])
{int i;char *p=tt; for(i=0;i<26;i++) alf[i]=0; While(*p) {if(*p>=’A’&& *p <=’Z’)*p+=32; if(*p>=’a’&& *p <=’z’)
Alf*p-‘a’]++;p++;}}
147、查找str中值为x的元素,返回该字符序列中值为x的元素个数,并把这些值为x的元素下标依次保存在数组bb中。例如,在“abcdefahij”中查找“a”,结果为:2个“a”,下标一次为0、6。
Int fun(char *str,char ch)
{int i=0,n=0;char t=ch;char *p=str;while(*p){if(*p= =t)bb[n++]=i;p++;i++;}return n;}
148、str为一个字符序列,序列由字符0和1组成。查找该字符序列中0字符连续出现的最长长度(即0字符的个数),如果有几个0字符串长度相同,只记录最后一个0字符串的相关信息。通过m和k返回最长0字符串的长度和最后0字符的下标。如果输入“01001000”,结果为:0字符串最长长度为3,起始和结尾下标依次为5、7。
Void fun(char *str,int *m,int *k)
{int i,j=0;int bb[N];char *p=str;*m=0;*k=0;for(i=0;i<N;i++)bb[i]=0;i=0; while(*(p+i)){if(*(p+i)= =’0’){ bb[j]++;i++;}else
{j++;i++;}if(*m<=bb[j]){ *m=bb[j];*k=i-1;}}}
149、统计一个长度为n的字符串在另一个字符串出现的次数。若输入的字符串为:asd ascasdfg asd as asd mlosd,子字符串为asd,则应输出4。
Int fun(char *str, char *substr)
{int n;char *p,*r;n=0;while(*str){p=str;r=substr;while(*r)if(*r= =*p){r++;p++;}else break;if(*r= =’\0’)n++;str++;}return n;}
150、返回字符数组中指i定字符的个数。
Int fun(char s[],char ch)
{int i=0,n=0;while(s[i])
{if(s[i]==ch)n++;i++;}
return n;}
151、分别统计字符串中大写字母和小写字母的个数。例如,给字符串ss输入:AaaaBBb123CCccccd则输出结果应为:upper=5,lower=9。
Void fun(char *s,int *a,int *b)
{while(*s){if(*s>=’A’&&*s<=’Z’)(*a)++; if(*s>=’a’&&*s<=’z’)(*b)++;s++;}}
Main()
{char s[100];int upper=0,lower=0;printf(--);gets(s); fun(s,&upper,&lower);printf(“\nupper=%dlower=%d\n”,upper,lower);}
152、对指定字符串在字符串a中出现的次数进行统计,统计的数据存到b数组中。其中:字符“Z”出现的次数存放到b[0]中,字符“Y”出现的次数存放到b[1]中,字符“X”出现的次数存放到b[2]中,字符“W”出现的次数存放到b[3]中,字符“V”出现的次数存放到b[4]中,其它字符出现 的次数存放在b[5]中。例如,当a中的字符串为“AYYZXW1Y+ZWVP”,调用函数后b中存放数据应是:2、3、1、2、1、4。
Void fun(char *a,int b[])
{int i;for(i=0;i<6;i++)
b[i]=0;for(i=0;i<strlen(a);i++)if(a[i]>=’V’&& a[i]<=’Z’)b[4-(a[i]-‘V’)]++;else b[5]++;}
Main()
{int I,b[6];char a[100]={---};fun(a,b);printf(---);for(i=0;i<6;i++)printf(“%d”,b[i]); printf(\n”);}
153、统计形参s所指字符串中数字字符出现的次数,例如,形参s所指的字符串为:abcdef35adgh3kjsdf7。输出结果为:4
Void fun(char *s,int *t)
{int i,n;n=0;for(i=0;s[i]!=NULL;i++) if(a[i]>=’0’&& a[i]<=’9’)n++;*t=n;}
154、将形参s所指字符串中数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。例如,形参s所指字符串为abs5def126jkm3,程序执行后的输出结果为:22。
Int fun(char *s)
{int sum=0;while(*s)
{isdigit(*s)sum+=*s-48;s++;}return sum;}
155、按条件删除一个字符串指定字符一半的数目,如果该字符串所包含的指定字符串的个数是奇数,则不予删除,如果其数目是偶数,则删除原字符串后半部分的指定字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,c中存放指定的字符。例如:当a输入“abababa”,c=“a”时b的输出为“ababa”,则b的输出为“ababa”。
Void fun(char a[],char b[],char c)
{int i=0,j=0;int n=0;int m=0;while(a[i]!=’\0’){if(a[i]= =c)n++;i++}i=0;if(n%2){while(a[j]!=’\0’){ b[j]= a[j];j++;}j++;} b[j]=’\0’;
}else { while(a[i]!=’\0’){ b[j++]= a[i]; if(a[i]= =c)m++;if((m>n/2)&&( a[i]= =c))j- -;i++;} b[j]=’\0’;}}
156、只保留字符串中的大写字母,删除其它字符。
void fun(char *s)
{int i=0,j=0;char *p=s;while(*(p+i)){if(*(p+i)>=’A’&&*(p+i)<=’Z’){s[j++]=*(p+i);}i++;}s[i]’\0’;m=j;}
157、把字符串下标能被2或3整除的字符从字符串str中删除,把剩余的字符重新保存在字符串str中。例如,若输入“abcdefghijk”,则输出为“bfh”。
void fun(char s[],int n)
{int i,k;k=0;for(i=0;i<n;i++){s[k++]=s[i];if((i%2= =0)|| (i%3= =0))k--;}s[k]=’\0’;}
158、把字符下标为非素数的字符从字符串str中删除,把字符下标为素数的字符重新保存在字符串str中,例如,输入“abcdefghijkl”,输出“cdfhl”。
void fun(char s[],int n)
{int i,j,k,flag;k=0; for(i=0;i<n;i++){if(i>1) s[k++]=s[i];flag=1;for(j=2;j<I;&&flag;j++)if(i%j= =0){flag=0;k--;}s[k]=’\0’;}}
159、删除字符数组中小于等于指定字符的字符,指定字符从键盘输入,结果仍保存在数组中,例如,输入“abcdefghij”,指定字符为“d”,则结果输出“defghij”。
void fun(char s[],char ch)
{int i=0;j=0;while(s[i]){if(s[i]<ch)i++;else {s[j++]=s[i];i++;} } s[j]=’\0’;}
160、把ASCII码为偶数的字符从字符串str中删除,结果仍然保存在字符串str中,例如,输入abcdef,则输出ace。
void fun(char s[],int n)
{int i,j;j=0;for(i=0;i<n;i++){ if(s[i]%2! =0) s[j++]=s[i]; }s[j]=’\0’;}
161、把ASCII码为奇数的字符从字符串str中删除,结果仍然保存在字符串str中,例如,输入abcdef,则输出bdf。
void fun(char s[],int n)
{inti,j;j=0;for(i=0;i<n;i++)
{ if(s[i]%2= =0) s[j++]=s[i]; }s[j]=’\0’;}}
162、从键盘输入一个字符串及一个指定字符,然后把这个字符串及后面的所有字符全部删除。结果仍然保存在原串中。例如,输入“abcdef”,指定字符为“e”,则输出为“abcd”。
main()
{int i=0;char str[N];char ch;printf(---);gets(str);printf(---);scanf(“%c”,%ch);while(str[i]!=’\0’){if(str[i]= =ch)break;i++;}
str[i] =’\0’; printf(---);puts(str);}
163、把字符串str1中的非空格字符拷贝到字符串str2中。例如,str1=“glad to see you!”,则str2=“gladtoseeyou!”。
main()
{static char str1[N]=”--”;
char str2[N];int i=0,j=0;clrscr();printf(--);puts(str1);while(str1[i]){if(str1[i]!=’ ’)str2[j++]=str1[i];
i++;}printf(---);for(i=0;i<j;i++)printf(“%c”,str2[i]);}
164、把一个二维字符数组每行字符串最大的字符拷贝到字符数组s中。如果str[3]={“dfjh”,“efknls”,“owys”},则s=“hsy”。
main()
{int i=0;char *str[3]={---};char **p;char s[8];p=str;for(i=0;i<3;i++){s[i]=*p[i];while(*p[i]){if(s[i]<*p[i]) s[i]= *p[i];
p[i]++;}}s[i]=’\0’;printf(---);puts(s);}
165、从键盘输入若干字符放到一个字符数组中当按回车键时结束输入,最后输出这个字符数组中的所有字符。
main()
{int i=0;char s[81];char *p=s;printf(--);for(i=0;i<80;i++){s[i]=getchar();if(s[i]= = ‘\n’)break;s[i]=’\0’; printf(--);
While(*p)putchar(*p++);}
166、把一个字符串中的字符(字母)按从大到小排序,并把这个全部由字母组成的字符串保存在原串中,函数返回这个字符串的长度。输入“crxbr2.3”,如果为bcirx,字符串长度为5。
Int fun(char *str)
{int i=0,j=0,k=0,m=0;char t;char *p=str;while(*p) {if((*p>=’A’&&*p<=’Z’)|| (*p>=’a’&&*p<=’z’))*(str+i++)=*p;p++;}
*(str+i)=’\0’;p=str;while(*(p+j)){k=j;m=j;while(*(p+k)){if(*(p+k)<*(str+m)){t=*(str+m); *(str+m)= *(p+k); *(p+k)=t;}k++;} j++;}return i;}
167、从键盘输入一组字符串,以“*”结束输入,并显示出这个字符串。例如,输入abcdefghi*,结果显示abcdefghi。
Main()
{int i= -1;j=0;char str[N];printf(--);do{i++;scanf(“%c”,&str[i]);}while(str[i]!=’*’); printf(--);while(j<i){printf(“%c”,str[j]);j++;}
168、判断一个数是否为回文数。当字符串是回文时,函数返回字符串:yes!否则函数返回字符串:no!,并在主函数中输出。
char *fun(char *str)
{char *p1,*p2;int i,t=0; p1=str; p2=str+strlen(str)-1;for(i=0;i<= strlen(str)/2;i++)if(*p1++!=*p2---){t=1;break;}if(t= =0) return “yes!”;else return “no!”; }
169、判断形参s所指字符串是否为回文,若是函数返回值为1,不是函数返回值为0.
int fun(char *s)
{char *lp,*rp;lp=s;rp=s+strlen(s)-1;while(---){lp++;rp- -;}if(lp<rp)return 0;else return 1;
170、比较字符串str1和str2的大小,并返回比较的结果。例如:当str1=“cdef”, str2=“ced”时,函数返回fun返回“>”。
char *fun(char *str1, char *str2)
{ char *p1=str1,*p2=str2; while(*p1&&*p2){if(*p1<*p2)return “<”; if(*p1>*p2)return “>”;p1++;p2++;}
if(*p1= =*p2)return “ = =”; f(*p1= =’\0’) return “<”;else return “>”}
171、利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出结果。Ss所指字符串数组中共有N个字符串,且串长小于M。
Void fun(char (*ss)[M])
{char *ps[N],*tp;int i,j,k;for(i=0;i<N;i++) ps[i] = ss[i]; for(i=0;i<N-1;i++)
{k=i;for(j=i+1;j<N1;j++)if(strlen(ps[k])< strlen(* (ps+j)
)k=j;tp= ps[i];ps[i]=
ps[k];ps[k]=tp;}printf(---);for(i=0;i<N;i++)put(ps[i];)
172、用冒泡法对6个字符串进行排序。
Fun(char *pstr[6])
{int i,j;char *p;} for(i=0;i<5;i++){ for(j=i+1;j<6;j++){if(strcmp(*(pstr+i), *(pstr+j))>0){p=*(pstr+i);pstr[i]= pstr[j];*(pstr+i)=p;}
173、将仅在字符串s中出现而不在字符串t中出现的字符,和仅在字符串t中出现而不在字符串s中出现的字符,构成一个新字符串放在u中,u中的字符按原字符串中字符顺序排序,不去掉重复字符。例如:当s=“112345”,t=“24677”时,u中的字符为“1135677”。
Void fun(char *s, char *t, char *u)
{int i,j,s1,t1;s1=strlen(s);
t1=strlen(t); for(i=0;i<s1;i++){ for(j=0;j<t1;j++)if(s[i]= = t[j])break;if(j>=t1)*u++=s[i];}
for(i=0;i<ts1;i++){ for(j=0;j<s1;j++) if(t[i]= = s[j])break; if(j>=s1)*u++=t[i];}*u=’\0’;}
174、将既在字符串s中出现,又在字符串t中出现的字符形成一个新字符串放在u中,u中的字符按原字符串中字符顺序排序,不去掉重复字符。例如:当s=“122345”,t=“2467”时,u中的字符为“24”。
Void fun(char *s, char *t, char *u)
{int i,j,s1,t1,k,u1=0;
s1=strlen(s);t1=strlen(t); for(i=0;i<s1;i++){ for(j=0;j<t1;j++)if(s[i]= = t[j])break;if(j<t1){for(k=0;k<u1;k++) if(s[i]= = u[k])break; if(k>=u1) u[u1++]=s[i];} u[u1]=’\0’;}
175、将未在字符串s中出现而在字符串t中出现的字符,形成一个新字符串放在u中,u中的字符按原字符串中字符顺序排序,不去掉重复字符。例如:当s=“12345”,t=“2467”时,u中的字符为“67”。
Void fun(char *s, char *t, char *u)
{ int i,j,s1,t1,k,u1=0;s1=
strlen(s);t1=strlen(t); for(i=0;i<t1;i++){ for(j=0;j<s1;j++)if(t[i]= = s[j])break;if(j>=s1)
for(k=0;k<u1;k++) if(t[i]= = u[k])break; f(k>=u1) u[u1++]=t[i];} u[u1]=’\0’;}
176、将在字符串s中出现,而未在字符串t中出现的字符形成一个新字符串放在u中,u中的字符按原字符串中字符顺序排序,不去掉重复字符。例如:当s=“112345”,t=“24677”时,u中的字符为“1135”。
Void fun(char *s, char *t, char *u)
{int i,j,s1,t1;s1=strlen(s);t1=strlen(t); for(i=0;i<s1;i++){ for(j=0;j<t1;j++)if(s[i]= = t[j])break;if(j>=t1)*u++=s[i];}*u=’\0’;}
177、将在字符串s中下标为奇数位置上的字符,紧随其后重复出现一次,放在一个字符串t中,t中字符按原字符串中字符出现的逆序排列。(注意0为偶数)例如:当s中字符串为“1234567”时,则t中字符串应为:“664422”。
void fun(char *s, char *t)
{int i,j,s1;s1=strlen(s);if(s1%2)s1- =2;else s1- -;for(i=s1,j=0;i>=0;i- =2){t[2*j]=s[i]; t[2*j+1]=s[i];i++;} t[2*j]=’\0’;}
178、将在字符串s尾部开始,按逆序把在其中出现的每相邻的两个字符交换位置,并依次把每个字符紧随其后重复出现一次,放在一个字符串t中,例如:当s中字符串为“12345”时,则t中字符串应为:“4455223311”。
void fun(char *s, char *t)
{int i,j,s1;s1=strlen(s); for(i=s1-1,j=0;i>=0;i- =2){if(i-1>=0)t[j++]=s[i-1]; if(i-1> =0)t[j++]=s[i-1]; t[j++]=s[i]; t[j++]=s[i];t[j]= ’\0;}
main()
{char s[100],t[100];printf(---);scanf(“%s”,s);fun(s,t);printf(---);}
179、将在字符串s尾部开始,按逆序把在其中出现的每相邻的两个字符,紧随其后重复出现一次,放在一个字符串t中,若字符串s中头部有剩余的单个字符也重复,放在t的最后。例如:当s中字符串为“1234567”时,则t中字符串应为:“664422”。
void fun(char *s, char *t)
{int i,j,s1;s1=strlen(s); for(i=s1-1,j=0;i>=0;i- =2){if(i-1>=0)t[j++]=s[i-1]; if(i-1> =0)t[j++]=s[i-1]; t[j++]=s[i]; if(i-1> =0)t[j++]=s[i-1];t[j]=’\0’;}
main()
{char s[1000],t[1000];printf(---);scanf(“%s”,s);fun(s,t);printf(---);}
180、将在字符串s中出现,而未在字符串t中出现的字符形成一个新字符串放在u中,u中的字符按原字符串中字符顺序按逆序排列,不去掉重复字符。例如:当s=“112345”,t=“2467”时,u中的字符为“5311”。
Void fun(char *s, char *t, char *u)
{int i,j,s1,t1,u1;char r,*up=u;s1=strlen(s);t1=strlen(t); for(i=0;i<s1;i++){ for(j=0;j<t1;j++)if(s[i]= = t[j])break;if(j>=t1)
*u++=s[i];}*u=’\0’;u1=strlen(up); for(i=0;i<u1/2;i++){r=up[i]; up[i]= up[u1-1-i]; up[u1-1-i]=r;}}
181、把在字符串s中出现的每隔字符,紧随其后重复出现一次,形成一个新串放在t中,且在t中把原相邻字符的位置进行了交换。例如:当s中的字符串为:“12345”时,则t中的字符串应为:“2211443355”。
void fun(char *s, char *t)
{int i,j,s1;s1=strlen(s);for(i=0,j=0;i<s1;i+ =2){if(i+1<s1){t[2*j]=s[i+1]; t[2*j+1]=s[i+1];j++;} t[2*j]=s[i]; t[2*j+1]= s[i];j++;}
t[2*s1]=’\0’;}
main()
{char s[100],t[100];printf(---);scanf(“%s”,s);fun(s,t);printf(---);}
182、求出形参ss所指字符串数组中最长字符的长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。
Void fun(char (*ss)[N])
{int k=0,i,j,n,len;for(i=0;i<M;i++){len=strlen(ss[i]);if(i= =0) n=len;if(len>n){n=len;k=i;}} for(i=0;i<M;i++) if(i! =k){m=n;
len=strlen(ss[i]); for(j=len;j>=0;j--)ss[i][m- -]=ss[i][j]; for(j=0;j<n-len;j++)ss[i][j]=’*’;}}
183、求出形参ss所指字符串数组中最长字符的长度,其余字符串右边用字符*补齐,使其与最长的字符串等长
Void fun(char (*ss)[N])
{ int i,j,n,len=0; for(i=0;i<M;i++){n=strlen(ss[i]);if(i= =0) len= n; if(len<n) len =n;}for(i=0;i<M;i++);for(j=0;j<len-n;j++)
ss[i][n+j]=’*’; ss[i][n+1+j]=’\0’;}}
184、在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指字符串为:def35adh3kjsdf7*。执行结果为:def3*5adh3*kjsdf7*。
Void fun(char *s)
{int I,j,n;for(i=0;s[i]!=’\0’;i++)if(s[i]>=’0’&& s[i]<=’9’){n=0;while(s[i+1+n]!=0)n++;for(j=i+n+1;j>i;j--) s[j+1]= s[j];
s[j+1]=’*’;i=i+1;}}
185、在形参s所指字符串中寻找与参数c形同的字符,并在其后插入一个与之相同的字符,若找不到相同字符则函数不做任何额处理。例如,s所指字符串为:baacda,c中的字符为:a,执行后s所指字符串为:baaaacdaa。
Void fun(char *s,char c)
{int i,j,n;for(i=0;s[i]!=0;i++)if(s[i]= =c){n=0;while(s[i1+n]!=’\0’ )n++;for(j=i+n+1;j>i;j--) s[j+1]= s[j]; s[j+1]=c;i=i+1;}}
186、将a和b所指的两个字符串转换成面值相同的整数,并进行相加作为函数值返回,规定字符串中只含9以下数字字符。例如,主函数中输入字符串:32486和12345,在函数中输出的函数值为:44831.
long ctod(char *s)
{long d=0;while(*s)if(
isdigit(*s)){d=d*10+*s-‘0’;s++;}return d;}
long fun(char *a, char *b)
{return ctod(a)+ ctod(b);}