C_19作业数字排序and字符串处理
1。数字排序=====================================================#defineTOTAL 10
/*在指针p处,依次输入存放n个int型数*/
void InputNum(int *p,int n)
{
int i=0;
for(;i < n;i++)
{
scanf("%d",p+i);
}
}
/*把指针p指向的n个int型的数依次显示出来*/
void Show(int *p,int n)
{
int i=0;
for(;i<n;i++)
{
printf("%d ",*(p+i));
}
printf("\n");
}
/*比较两个数大小, a>b返回1 , a<b返回0 */
int NumCmp(int a,int b)
{
return a>b ? 1:0;
}
/*交换两个数的位置*/
void Change(int *a,int *b)
{
int t;
t = *a;
*a = *b;
*b =t;
}
/*把指针p指向的n个int型的数进行从大到小排序*/
void LtoS(int *p, int n)
{
int i,j;
for(j=0;j<n-1;j++)
{
for(i=0;i<n-1-j;i++)
{
if(!(NumCmp(*(p+i),*(p+i+1))))
{
Change(p+i,p+i+1);
}
}
}
}
/*把指针p指向的n个int型的数进行从小到大排序*/
void StoL(int *p, int n)
{
int i,j;
for(j=0;j<n-1;j++)
{
for(i=0;i<n-1-j;i++)
{
if(NumCmp(*(p+i),*(p+i+1)))
{
Change(p+i,p+i+1);
}
}
}
}
/*把指针p指向的n个int型的数进行乱序排序*/
void LX(int *p, int n)
{
int i,j,t=1;
for(j=0;j<n-1;j++)
{
for(i=n-2;i>=0;i--)
{
if(t == 1)
{
if(NumCmp(*(p+i),*(p+i+1)))
{
Change(p+i,p+i+1);
}
}
else
{
if(!(NumCmp(*(p+i),*(p+i+1))))
{
Change(p+i,p+i+1);
}
}
}
t=t*(-1);
}
}
/* 比较两个指针指向的字符串是否相等,相等返回1,不等返回0 */
int MyStrCmp(char *str1,char *str2)
{
int i=0;
while(*(str1+i))
{
if(*(str1+i) != *(str2+i))
{
return 0;
}
i++;
}
return 1;
}
/*根据指针type指向的字符串,判断用哪种排序方法,对指针p指向的n个int型的数进行排序*/
void SortIntList(int *p,int n,char *type)
{
char fun1[] = {"LtoS"};
char fun2[] = {"StoL"};
char fun3[] = {"LX"};
if(MyStrCmp(fun1,type))
{
LtoS(p,n);
}
else if(MyStrCmp(fun2,type))
{
StoL(p,n);
}
else if(MyStrCmp(fun3,type))
{
LX(p,n);
}
}
int main()
{
int *p = (int *)malloc(10 * sizeof(int));
printf("Please Input %d Number:\n",TOTAL);
InputNum(p,TOTAL);
SortIntList(p,TOTAL,"LtoS");
printf("The Large to Small Number:\n");
Show(p,TOTAL);
SortIntList(p,TOTAL,"StoL");
printf("The Small to Large Number:\n");
Show(p,TOTAL);
SortIntList(p,TOTAL,"LX");
printf("The Luan Xu Number:\n");
Show(p,TOTAL);
free(p);
return 0;
}
==================================================
2。字符串处理#define N 20
/* 指针p指向的字符串小写转大写 */
void MyStrUpper(char *p)
{
int i=0;
while(*(p+i))
{
if(*(p+i) >= 'a' && *(p+i) <= 'z')
{
*(p+i)-=0x20;
}
i++;
}
}
/* 指针p指向的字符串大写转小写 */
void MyStrLower(char *p)
{
int i=0;
while(*(p+i))
{
if(*(p+i) >= 'A' && *(p+i) <= 'Z')
{
*(p+i)+=0x20;
}
i++;
}
}
void MyStrPJ(char *str1,char *str2)
{
int i=0,si=0;
if(strlen(str1) + strlen(str2) > N)
{
printf("Don't PJ!\n");
}
else
{
si=strlen(str1);
while(*(str2+i))
{
*(str1+si+i) = *(str2+i);
i++;
}
*(str1+si+i) =0;
puts(str1);
printf("\n");
}
}
/* 记录指针str指向的字符串中字符a的个数js,返回js */
int MyStrJS(char *str,char a)
{
int i=0,js=0;
while(*(str+i))
{
if(*(str+i) == a)
{
js++;
}
i++;
}
return js;
}
/*记录指针str指向的字符串中字符串word的个数js,返回js*/
int MyStrWord(char *str,char *word)
{
int i=0,j,js=0;
while(*(str+i))
{
if(*(str+i) == *word)
{
j=0;
while(*(word+j))
{
if(*(str+i) != *(word+j))
{
break;
}
j++;
i++;
}
i--;
if(j == strlen(word))
{
js+=1;
}
}
i++;
}
return js;
}
/* 查找字符串str是否是字符串b开头,是返回1,不是返回0 */
int MyStrBeginCmp(char *str,char *b)
{
int i=0;
while(*(b+i))
{
if(*(b+i) != *(str+i))
{
return 0;
}
i++;
}
return 1;
}
/* 查找字符串str是否是字符串e结尾,是返回1,不是返回0 */
int MyStrEndCmp(char *str,char *e)
{
int i=0,len;
len = strlen(str)- strlen(e);
while(*(e+i))
{
if(*(e+i) != *(str+i+len))
{
return 0;
}
i++;
}
return 1;
}
main()
{
char *str1 = (char *)malloc(N * sizeof(char));
char *str2 = (char *)malloc(N * sizeof(char));
printf("Plsase Input str1: ");
scanf("%s",str1); /*输入一个字符串*/
MyStrUpper(str1); /*字符串小写转大写*/
printf("The Upper str1 : ");
puts(str1);
printf("Plsase Input str2: ");
scanf("%s",str2); /*输入一个字符串*/
MyStrLower(str2); /*字符串小写转大写*/
printf("The Lower str2 : ");
puts(str2);
printf("The str1 and str2 PJ(把2个字符串拼接起来) :");
MyStrPJ(str1,str2); /* 把字符串str1,str2拼接到str1 */
printf("Plsase Input str(输入一个字符串查看其中'a'个数): ");
scanf("%s",str1); /*输入一个字符串*/
printf(" %d 'a' in The str!\n",MyStrJS(str1,'a')); /*查找字符串中'a'的个数*/
printf("Plsase Input str(输入一个字符串查看其中'hello'个数): ");
scanf("%s",str1); /*输入一个字符串*/
printf("%d 'hello' in The str\n",MyStrWord(str1,"hello")); /*查找字符串中'hello'的个数*/
printf("Plsase Input str(输入一个字符串查看是否已'begin'开头): ");
scanf("%s",str1); /*输入一个字符串*/
if(MyStrBeginCmp(str1,"begin")) /*查找字符串是否是'begin'开头*/
{
printf("Yes!\n");
}
else
{
printf("No!\n");
}
printf("Plsase Input str(输入一个字符串查看是否已'end'结尾): ");
scanf("%s",str1); /* 输入一个字符串 */
if(MyStrEndCmp(str1,"end")) /* 查找字符串是否是'end'结尾 */
{
printf("Yes!\n");
}
else
{
printf("No!\n");
}
free(str2);
free(str1);
} 郁闷。怎么我的代码引用下就显示的这么乱了,大家要看的话,复制到记事本看吧。 顶贴 Z大威武我还在看书...
根基没打牢啊... :sleepy:没事,能看懂,乱就乱点,放IDE,自动美化下代码就好了……
页:
[1]