- #include<stdio.h>
- //定义有参无返回值的函数,形参为char类型的指针变量
- voidchaCha(char *p){
- //定义整型变量a,len,并初始化赋值0
- int a=0;
- intlen=0;
- //定义字符型变量key,并初始化赋值' ',key即表示字符串中的空格字符
- char key=' ';
- //循环遍历,直到*(p+len)=='\0'时为止,遍历时len++,所得len即为字符串的长度
- for (inti=0; *(p+len)!='\0'; i++) {
- len++;
- }
- //循环遍历,直到*(p+len)=='\0'时为止,遍历中,如果*(p+i)是空格,a增加1个(a++),最后所得a即为空格数量
- for (inti=0; i<len; i++) {
- if (*(p+i)==key) {
- a++;
- }
- }
- //定义整型数组arr[a]
- intarr[a];
- //循环遍历字符串指针指向的字符*(p+j)是否等于空格,等于就让数组arr[a]的元素依次等于字符的下标j
- //循环遍历以上步骤,可使数组元素值依次等于字符串中空格的下标
- [color=Red][b]???这里总是找出最后一个空格,前面的空格找不到是怎么回事?[/b][/color]
- for (inti=0; i<a; i++) {
- for (int j=0; j<len; j++) {
- if (*(p+j)==key) {
- arr[i]=j;
- }
- }
- }
- //定义整型数组arr1[a-1]
- int arr1[a-1];
- //循环遍历整型数组arr1[a-1],使数组arr1的元素值等于数组arr相应元素(字符串中空格的下标)之差,arr1[i]=arr[i+1]-arr[i]
- for (inti=0; i<a-1; i++) {
- arr1[i]=arr[i+1]-arr[i];
- }
- //找数组arr1[a-1]中的最大数,并记录下标,也就是数组arr相应元素之差最大,也就是字符串中空格的下标之差最大,即两个空格之间的单词最长
- int max=0;
- for (inti=0; i<a-1; i++) {
- if (arr1[max]<arr1[i]) {
- max=i;
- }
- }
- //arr1[max]就是数组arr1[a-1]中的最大数,又因为arr1[i]=arr[i+1]-arr[i]
- //所以字符串中,空格之间的单词中,第max个空格和第max+1个空格中间的单词最长
- /*四种情况
- 1、字符串最前面的字符不是空格,字符串最后一个字符是空格;
- 2、字符串最前面的字符是空格,字符串最后一个字符不是空格;
- 3、字符串最前面的字符是空格,字符串最后一个字符是空格;
- 4、字符串最前面的字符不是空格,字符串最后一个字符不是空格;
- 上面四种情况可以归纳为第一个单词,最后一个单词,第max+1个空格后面的单词,三个单词的比较,共9种结果
- */
- //定义整型变量x,并赋值arr[max+1]-arr[max],如果x最大,那么字符串中第max+1个空格后面的单词最长
- int x=arr[max+1]-arr[max];
- //定义整型变量y,并赋值len-1-arr[a-1],如果y最大,那就是最后一个单词最长
- int y=len-1-arr[a-1];
- //定义整型变量z,并赋值arr[0],如果z最大,那就是第一个单词最长
- int z=arr[0];
- //用if语句分别判断9种情况,并打印输出相应结果
- if (z>x) {
- if (y>z) {printf("字符串中的最后一个单词最长\n");
- }elseif(y==z){printf("字符串中的第一个和最后一个单词都是最长的\n");
- }else{printf("字符串中的第一个单词最长\n");}
- }
- if (z<x) {
- if (y>x) {printf("字符串中的最后一个单词最长\n");
- }elseif(y==x){printf("字符串中最后一个单词和第%d个空格后面的单词都是最长\n",max+1);
- }else{printf("字符串中第%d个空格后面的单词最长\n",max+1);}
- }
- if (z==x) {
- if (z==y) {printf("字符串中的第一个、最后一个单词、第%d个空格后面的单词都是最长的\n",max+1);
- }elseif(y>z){printf("字符串中的第一个单词最长\n");
- }else{printf("字符串中的第一个单词和第%d个空格后面的单词都是最长的\n",max+1);}
- }
- }
- //入口函数
- int main(){
- //定义char类型指针变量,并初始化赋值字符串
- char *p="china americacanadauk ";
- //调入定义的chaCha函数
- chaCha(p);
- return 0;
- }
复制代码 |
|