1.统计字符串s在字符串str中出现的次数
#include <conio.h>
#include <stdio.h>
#include <string.h>
int MySearch( char* str, char* s )
{
char* p;
int n =0;
for( ; *str; )
/***************found***************/
if( ( p = strstr( str, s ) ) != ___1___ )
{ n++; str=p+1; }
else
/***************found***************/
___2___;
/***************found***************/
return( ___3___ );
}
main()
{
char str1[81], str2[21];
printf("\nPlease enter str1 :");
gets(str1);
printf("\nplease enter str2 :");
gets(str2);
printf( "\n\n\"%s\" are(is) appeared in str1 %d times\n", str2, MySearch(str1, str2));
}
2. 删除字符串 str 中所有 c 字符,并返回所删字符的个数。
#include <conio.h>
#include <stdio.h>
int MyDelete( char* str, char c )
{
int i, j=0, k=0;
for( i = 0; str[i]; i++ )
if( str[i] != c )
/***************found**************/
{ str[ j ]= str[i]; ___1___; }
else
k++;
/***************found**************/
str[j]=___2___ ;
/***************found**************/
return( ___3___ );
}
main()
{
char string[81], x;
printf("\nPlease enter a string:\n");
gets(string);
printf("\nPlease enter a character: ");
scanf("%c", &x );
printf( "\n\nAfter deleting %d '%c'(s), the string becomes:\n%s\n",MyDelete(string, x), x, string);
}
3.将未在字符串s中出现而在字符串t中出现的字符形成一个新的字符串放在u中,u中字符按字符串t中字符顺序排列
#include <stdio.h>
#include <string.h>
void fun (char *s, char *t, char *u)
{ int i, j, sl, tl, k, ul=0;
sl = strlen(s); tl = strlen(t);
for (i=0; i<tl; i++)
{ for (j=0; j<sl; j++)
if (t[i] == s[j]) break;
if (j>=sl)
{ for (k=0; k<ul; k++)
/************found************/
if (t[i] == u[k]) ___1___ ;
if (k>=ul)
/************found************/
u[ul++] = ___2___ ;
}
}
/************found************/
___3___='\0';
}
main()
{ char s[100], t[100], u[100];
printf("\nPlease enter string s:"); scanf("%s", s);
printf("\nPlease enter string t:"); scanf("%s", t);
fun(s, t, u);
printf("The result is: %s\n", u);
}
4.将在字符串S中下标为奇数位置上的字符,紧随其后重复出现一次,放在一个新串T中,T中字符按原字符串中字符的顺序排列.(注意0为偶数)
#include <stdio.h>
#include <string.h>
void fun (char *s, char *t)
{ int i, j, sl;
sl = strlen(s);
/************found************/
if(sl%2) sl-=2; ___1___ sl--;
/************found************/
for (i=sl, j=___2___; i>=0; i-=2)
{ t[2*j] = s[i];
/************found************/
t[2*j +1] = ___3___ ;
j++;
}
t[2*j]='\0';
}
main()
{ char s[100], t[100];
printf("\nPlease enter string s:"); scanf("%s", s);
fun(s, t);
printf("The result is: %s\n", t);
}
5.给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,将其余字符串右边用字符*补齐,使其与最长的字符串等长。ss所指字符串数组中共有M个字符串,且串长。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构! 给定源程序
#include <stdio.h>
#include <string.h>
#define M 5
#define N 20
void fun(char (*ss)[N])
{ int i, j, k=0, n, m, len;
for(i=0; i<M; i++)
{ len=strlen(ss[i]);
if(i==0) n=len;
if(len>n) {
/**********found**********/
n=len; ___1___=i;
}
}
for(i=0; i<M; i++)
if (i!=k)
{ m=n;
len=strlen(ss[i]);
/**********found**********/
for(j=___2___; j>=0; j--)
ss[i][m--]=ss[i][j];
for(j=0; j<n-len; j++)
/**********found**********/
___3___='*';
}
}
main()
{ char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"};
int i;
printf("\nThe original strings are :\n");
for(i=0; i<M; i++) printf("%s\n",ss[i]);
printf("\n");
fun(ss);
printf("\nThe result:\n");
for(i=0; i<M; i++) printf("%s\n",ss[i]);
}
6.
给定程序MODI1.C中函数fun()的功能是:将p所指字符串中每个单词的最后一个字母改成大写(这里的“单词”是指由空格隔开的字符串)。
#include <conio.h>
#include <ctype.h>
#include <stdio.h>
void fun( char *p )
{
int k = 0;
for( ; *p; p++ )
if( k )
{
/**********found***********/
if( p == ' ' )
{
k = 0;
/**********found***********/
* (p-1) = toupper( *( p - 1 ) )
}
}
else
k = 1;
}
NONO( )
{
/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
char s1[81];
FILE *rf, *wf ;
rf = fopen("g05.in", "r") ;
wf = fopen("g05.out", "w") ;
fgets(s1, 80, rf) ;
fun(s1);
fprintf( wf,"%s", s1 );
fclose(rf) ;
fclose(wf) ;
}
main()
{
char chrstr[64];
int d ;
printf( "\nPlease enter an English sentence within 63 letters: ");
gets(chrstr);
d=strlen(chrstr) ;
chrstr[d] = ' ' ;
chrstr[d+1] = 0 ;
printf("\n\nBefore changing:\n %s", chrstr);
fun(chrstr);
printf("\nAfter changing:\n %s", chrstr);
NONO();
}
7. 求出s所指字符串中最后一次出现t所指字符串的地址。
#include <conio.h>
#include <stdio.h>
#include <string.h>
char * fun (char *s, char *t )
{
char *p , *r, *a;
/************found************/
a = Null;
while ( *s )
{ p = s; r = t;
while ( *r )
/************found************/
if ( r == p ) { r++; p++; }
else break;
if ( *r == '\0' ) a = s;
s++;
}
return a ;
}
main()
{
char s[100], t[100], *p;
printf("\nPlease enter string S :"); scanf("%s", s );
printf("\nPlease enter substring t :"); scanf("%s", t );
p = fun( s, t );
if ( p ) printf("\nThe result is : %s\n", p);
else printf("\nNot be found !\n" );
}
8.将 tt 所指的字符串中所有的小写字母都转换成对应的大写字母其他字符不变。
#include <conio.h>
#include <stdio.h>
#include <string.h>
char* fun( char tt[] )
{
int i;
for( i = 0; tt[i]; i++ )
/**********found***********/
if(( 'a' <= tt[i] )||( tt[i] <= 'z' ) )
/**********found***********/
tt[i] += 32;
return( tt );
}
NONO( )
{
/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
char tt[81], ch;
FILE *rf, *wf ;
rf = fopen("g10.in", "r") ;
wf = fopen("g10.out", "w") ;
fgets(tt, 80, rf) ;
fun(tt) ;
fprintf( wf,"%s", tt );
fclose(rf) ;
fclose(wf) ;
}
main( )
{
int i;
char tt[81];
printf( "\nPlease enter a string: " );
gets( tt );
printf( "\nThe result string is:\n%s", fun( tt ) );
NONO();
}
9.将s所指字符串中位于奇数位置的字符或ASCII码为偶数的字符放入t所指数组中(规定第一个字符放在第0位中)。
例如,字符串s中的数据为:AABBCCDDEEFF,则字符串t中的数据为:ABBCDDEFF。
#include <conio.h>
#include <stdio.h>
#include <string.h>
#define N 80
void fun(char *s, char t[])
{ int i, j=0;
for(i=0; i<strlen(s); i++)
/***********found**********/
if(i%2 && s[i]%2==0)
t[j++]=s[i];
/***********found**********/
t[i]='\0';
}
main()
{ char s[N], t[N];
printf("\nPlease enter string s : "); gets(s);
fun(s, t);
printf("\nThe result is : %s\n",t);
}
10. 给定程序中函数fun的功能是:从s所指字符串中删除所有小写字母c。
请改正程序中的错误,使它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
void fun( char *s )
{ int i,j;
for(i=j=0; s[i]!='\0'; i++)
if(s[i]!='c')
/************found************/
s[j]=s[i];
/************found************/
s[i]='\0';
}
main()
{ char s[80];
printf("Enter a string: "); gets(s);
printf("The original string: "); puts(s);
fun(s);
printf("The string after deleted : "); puts(s);printf("\n\n");
}
11.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串尾部的*号全部 删除,前面和中间的*号不删除。
例如,字符串中的内容为****A*BC*DEF *G*******,删除后,字符串中的内容应当是****A*BC*DEF*G。在编写函数时,不得使用C语 言提供的字符串函数。
#include <stdio.h>
#include <conio.h>
void fun( char *a, char *h,char *p )
{
}
NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *in, *out ;
int i ; char s[81], *t, *f ;
in = fopen("in5.dat", "r") ;
out = fopen("out5.dat", "w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(in, "%s", s) ;
t=f=s;
while(*t)t++;
t--;
while(*t=='*')t--;
while(*f=='*')f++;
fun(s, f, t);
fprintf(out, "%s\n", s) ;
}
fclose(in) ;
fclose(out) ;
}
main()
{ char s[81],*t, *f;
printf("Enter a string:\n");gets(s);
t=f=s;
while(*t)t++;
t--;
while(*t=='*')t--;
while(*f=='*')f++;
fun( s , f,t );
printf("The string after deleted:\n");puts(s);
NONO();
}
12.从传入的num个字符中找出最长的一个字符串,并通过形参指针max传回该串地址。
#include <stdio.h>
#include <string.h>
#include <conio.h>
fun(char(*a)[81],int num,char **max)
{
}
NONO()
{
/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
输出数据,关闭文件。 */
char ss[20][81],*ps;
int n,i=0;
FILE *rf, *wf ;
rf = fopen("b0603.in", "r") ;
wf = fopen("b0603.out", "w") ;
fgets(ss[i], 81, rf);
while(!strncmp(ss[i],"****",4)==0)
{
i++;
fgets(ss[i], 81, rf);
}
n=i;
fun(ss,n,&ps);
fprintf(wf, "%s",ps);
fclose(rf) ;
fclose(wf) ;
}
main()
{
char ss[10][81],*ps;
int n,i=0;
printf("输入若干个字符串:");
gets(ss[i]);
puts(ss[i]);
while(!strcmp(ss[i],"****")==0)
{
i++;
gets(ss[i]);
puts(ss[i]);
}
n=i;
fun(ss,n,&ps);
printf("\nmax=%s\n",ps);
NONO();
}
13. 将ss所指字符串中所有下标为奇数位置上的字母转换为大写
#include <conio.h>
#include <stdio.h>
void fun( char *ss )
{
}
NONO()
{
/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
输出数据,关闭文件。 */
char tt[51], ch;
FILE *rf, *wf ;
int len, i=0 ;
rf = fopen("b1003.in", "r") ;
wf = fopen("b1003.out", "w") ;
while(i < 10) {
fgets( tt, 50, rf );
len = strlen(tt) - 1 ;
ch = tt[len] ;
if(ch == '\n' || ch == 0x1a) tt[len] = 0 ;
fun(tt);
fprintf( wf, "%s\n", tt );
i++ ;
}
fclose(rf) ;
fclose(wf) ;
}
void main( void )
{
char tt[51];
printf( "\nPlease enter an character string within 50 characters:\n" );
gets( tt );
printf( "\n\nAfter changing, the string\n \"%s\"", tt );
fun(tt) ;
printf( "\nbecomes\n \"%s\"", tt );
NONO();
}
14. 请编写函数fun,判断一个字符串是否是回文。若是回文函数返回值为1,主函数输出“YES”,否则返回值为0,主函数输出“NO”,。回文是顺读和倒读都一样的字符串。
#include <stdio.h>
#define N 80
int fun(char *str)
{
}
NONO()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *rf, *wf ;
int i ; char s[N] ;
rf = fopen("bc.in", "r") ;
wf = fopen("bc.out","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(rf, "%s", s) ;
if(fun(s)) fprintf(wf, "%s YES\n", s) ;
else fprintf(wf, "%s NO\n", s) ;
}
fclose(rf) ; fclose(wf) ;
}
main()
{ char s[N] ;
printf("Enter a string: ") ; gets(s) ;
printf("\n\n") ; puts(s) ;
if(fun(s)) printf(" YES\n") ;
else printf(" NO\n") ;
NONO() ;
}
15.函数void fun,统计在tt所指字符串中'a'到'z' 26个小写字母各自出现的次数,并依次放在pp所指数组中
#include <conio.h>
#include <stdio.h>
void fun(char *tt, int pp[])
{
}
NONO ( )
{/* 本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/
char aa[1000] ;
int bb[26], k, n, i ;
FILE *rf, *wf ;
rf = fopen("bc07.in", "r") ;
wf = fopen("bc07.out", "w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(rf, "%s", aa) ;
fun(aa, bb) ;
for ( k = 0 ; k < 26 ; k++ ) fprintf (wf, "%d ", bb[k]) ;
fprintf(wf, "\n" ) ;
}
fclose(rf) ;
fclose(wf) ;
}
main( )
{ char aa[1000] ;
int bb[26], k, n ;
printf( "\nPlease enter a char string:" ) ; scanf("%s", aa) ;
fun(aa, bb ) ;
for ( k = 0 ; k < 26 ; k++ ) printf ("%d ", bb[k]) ;
printf( "\n" ) ;
NONO ( ) ;
}