/*
求 在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。
解题思路
首先 利用循环将数组所有空格位置 统计出来,放入一个整型数组; 如 "ab b CD" 先设定一个整型数组 存放字符串A[] 中空格的位置 首先第一个空格位置 A[0] 值设为0
第一个空格位置A[1]为 3 第三个空格位置A[2] 为5 ; 单词长度用数组B[]存放 那么第一个单词ab 长度B[0]=A[1]-A[0]-1 =2 第一个单词吧长度B[1]=A[2]-A[1]-1 =1
那么第x个 单词长度B[X]=A[X+1]-A[X]-1 假如B[x]为最大值,即单词长度最长,只要知道B[X]值 就知道最大值的地址; B[X]=A[X+1]-A[X]-1 ,
则最大值对应的位置是在对应地址是p+A[x]
,同时然后利用地址,将下一个空格 即:地址为p+A[x+1]的空格,转换为\0,即可利用指针进行字符串输出 ;
*/
#include <stdio.h>
#include <string.h>
int main()
{
char string[] = "sdjf sjfdgf gdgj dhd dffdhfsiuhef u" ;
char *p = string ;
int num[30] ;
num[0] = 0 ;//设第一个值为0
int m = 1 ;
int i=0 ; //定义在外面,最后确定最后一个字节位置
for ( ; string[i] != '\0' ; i++) //逐个字符进行判断
{
if(string[i] == ' ') // 如果是空格 记录空格位置
{
num[m] = i+1 ; // mum[i] 就是第i个空格位置 ,
m++ ;
}
}
num[m] = i+1 ;//记录最后一个字符'\0'的位置 i+1 ,for循环以后m++,但没有执行mum[m]没有值,将\0 位置记录在mum[m]中
int length[30] ;
for(int a=0 ; a < m-1 ; a++ ) //将 各个字符串长度值依次输入数组中
{
length[a] = num[a+1]-num[a]-1;
}
int max(int ages[] , int m); //声明一个 max函数 进行 最长字符循环判断 并返回最长字符串中a[i]的i值
int x = max( length , m-1 ) ; //函数 调用返回值
*(p+num[x+1]) = '\0' ; // 将最长字符串 后面的空格 赋值为'\0' 作为字符串结束的标志,
printf("%s\n",*(p+num[x])) ; //利用指针输出
return 0 ;
}
int max(int ages[] , int q)
{
int j = 0 ;
int max = 0 ;
for (int s=0;s < q ; s++)
{
if( max < ages[s]) // 交换 将最大值的s放赋予j,并返回
{
j= s ;
max = ages[s] ;
}
return (j) ;
}
|
|