31 、请编写函数void fun(char xx[]) ,函数的功能是:将字符串数组xx中下标为奇数的字符按其ASCII值从大到小的顺序进行排序 。
例如:源字符串为:abcdefgh ,则处理后字符串为:ahcfedgb 。
void fun(char xx[])
{
int i,j,k;
char ch;
i=strlen(xx);
for(j=1;j<i-2;j=j+2)
for(k=j+2;k<i;k=k+2)
if (xx[j]<xx[k])
{
ch=xx[j]; xx[j]=xx[k];xx[k]=ch;
}
}
参考程序
32 、请编写函数void fun(char xx[]) ,其功能是:从字符串xx中间一分为二 ,左边部分按字符的ASCII值降序排序 ,右边部分按字符的ASCII值升序排序 。如果原字符串长度为奇数 ,则最中间的字符不参加排序 ,字符仍放在原位置上 。
例如:若源字符串为:abcdhgfe ,则处理后字符串为:dcbaefgh 。若源字符串为:123498765 ,则处理后字符串为:432195678 。
#include <stdio.h>
#include <string.h>
void fun(char xx[])
{
}
int main()
{
char xx[81];
printf("Enter a string : ");
gets(xx);
printf("The original string is : ");
puts(xx);
fun(xx);
printf("The string after modified : ");
puts(xx);
return 0;
}
void fun(char xx[])
{
int i,j,k,half;
char ch;
i=strlen(xx);
half=i/2;
for(j=0;j<half-1;j++)
for(k=j+1;k<half;k++)
if(xx[j]<xx[k])
{
ch=xx[j];xx[j]=xx[k];xx[k]=ch;
}
if (i%2) half++;
for (j=half;j<i-1;j++)
for (k=j+1;k<i;k++)
if (xx[j]>xx[k])
{
ch=xx[j];xx[j]=xx[k];xx[k]=ch;
}
}
参考程序
33 、请编写函数void fun(char xx[]) ,其功能是:从字符串xx中间一分为二 ,左边部分按字符的ASCII值降序排序 ,排序后左边部分与右边部分进行交换 。如果原字符串长度为奇数,则最中间的字符不参加处理 ,字符仍放在原位置上 。
例如:若源字符串为:abcdhgfe ,则处理后字符串为:hgfedcba 。 若源字符串为:123498765,则处理后字符串为:876594321 。
#include <stdio.h>
#include <string.h>
void fun(char xx[])
{
}
int main()
{
char xx[81];
printf("Enter a string : ");
gets(xx);
printf("The original string is : ");
puts(xx);
fun(xx);
printf("The string after modified : ");
puts(xx);
return 0;
}
void fun(char xx[])
{
int i,j,k,half;
char ch;
i=strlen(xx);
half=i/2;
for(j=0;j<half-1;j++)
for(k=j+1;k<half;k++)
if(xx[j]<xx[k])
{
ch=xx[j];xx[j]=xx[k];xx[k]=ch;
}
for (j=half-1,k=i-1;j>=0;j--,k--)
{
ch=xx[j]; xx[j]=xx[k]; xx[k]=ch;
}
}
参考程序
34 、编写一个函数fun(char *str,char *substr) ,该函数统计一个长度为2的子字符串在另一个字符串中出现的次数 。
例如 ,若字符串str为"asd asasdfg asd as zx67 asd mklo" ,子字符串为"as" ,则函数返回值是6 。
#include <stdio.h>
#include <string.h>
int fun(char *str,char *substr)
{
}
int main()
{
char str[81], substr[3] ;
int n ;
printf("输入原字符串:") ;
gets(str) ;
printf("输入子字符串:") ;
gets(substr) ;
n=fun(str, substr) ;
printf("n=%d\n", n) ;
return 0;
}
int fun(char *str,char *substr)
{
int n=0;
char *p , *r;
while (*str)
{
p=str;
r=substr;
while(*r)
if (*r==*p) {r++; p++; }
else break;
if (*r==\0) n++;
str++;
}
return n;
}
参考程序
35 、请编写函数void fun(char xx[]) ,函数的功能是:将字符串数组xx中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号 ,将标点符号均转换为空格)仍重新存入字符串数组xx中 。
例如:源字符串为:I am a student ,则处理后字符串为:student a am I 。
特别说明:若源字符串末尾有一个标点 ,则转换后的字符串开头有一个空格。
#include <stdio.h>
#include <string.h>
void fun(char xx[])
{
}
int main()
{
char xx[81];
printf("Enter a string : ");
gets(xx);
printf("The original string is : ");
puts(xx);
fun(xx);
printf("The string after modified : ");
puts(xx);
return 0;
}
void fun(char xx[])
{
int len,i,j,k,s;
char str[81];
len=strlen(xx);
s=k=0;
for (i=len-1;i>=0;i--) // 从当前字符串尾部开始向前倒序循环,实现单词倒排
{
if((xx[i]>=A && xx[i]<=Z)|| (xx[i]>=a && xx[i]<=z))
k++; // 如果当前字符是字母a~z或A~Z ,则k加1
else // 否则将长度为k的单词顺序存入到字符串数组str中
{
for(j=1;j<=k;j++)
str[s++]=xx[i+j];
k=0; // 将k值清0 ,以方便下一个单词的长度计数
}
if(!((xx[i]>=A && xx[i]<=Z)|| (xx[i]>=a && xx[i]<=z)))
str[s++]=; // 如果当前字符不是字母a~z或A~Z,则以空格代之存入到字符串数组str中
}
for(j=1;j<=k;j++) // 此时的k值为当前字符串中第一个单词的长度,但在上一个for循环中没能存入到字符串数组str中,所以在这里将其存入到str中
str[s++]=xx[i+j];
str[s]=\0;
strcpy(xx,str); // 将倒排好的当前字符串重新存回到xx中
}
参考程序1
void fun(char xx[])
{
int i,len;
char str[81]={0};
len=strlen(xx);
for (i=len-1;i>=0;i--)
if(!((xx[i]>=A && xx[i]<=Z)|| (xx[i]>=a && xx[i]<=z)))
{
strcat(str,xx+i+1);
strcat(str," ");
xx[i]=\0;
}
strcat(str,xx);
strcpy(xx,str);
}
参考程序2
声明:本站所有文章 ,如无特殊说明或标注 ,均为本站原创发布 。任何个人或组织,在未征得本站同意时 ,禁止复制 、盗用 、采集 、发布本站内容到任何网站 、书籍等各类媒体平台 。如若本站内容侵犯了原著者的合法权益 ,可联系我们进行处理 。