- //在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。
-
- //声明一个字符串
- char* str = "Keep on going never give up";
- //声明一个数组,用来存放字符串的子字符串
- char* subStr[20];
- //声明一个数组,用来存放每个子字符串的长度
- int length[20];
- //说明子字符串的个数
- int subCount = 0;
- int i = 0;
- //j用来表明下一个子字符串的起始位置
- int j = i;
- //用来指向动态分配的空间
- char* temp;
-
- //遍历大字符串的所有元素。
- while (str[i] != '\0')
- {
- if(str[i] == ' ')
- {
- //如果某个元素为空格的话,则获取相应的子字符串
- temp = (char*)malloc((i - j + 1) * sizeof(char));
- int count = 0;
- for(int k = j; k<i; k++)
- {
- temp[count] = str[k];
- //将子字符创放到子字符串数组中
- subStr[subCount] = temp;
- count++;
- }
- //字符串结束标识
- temp[count] = '\0';
- //将长度放到长度数组中
- length[subCount] = count;
- subCount++;
-
- //让j指向下一个子字符串的起始下标
- j = i + 1;
- }
- i++;
- }
-
- //这是对结尾处的最后一个子串进行操作,步骤同前面一样
- temp = (char*)malloc((i - j + 1) * sizeof(char));
- int count = 0;
- for(int k = j; k<i; k++)
- {
- temp[count] = str[k];
- subStr[subCount] = temp;
- count++;
- }
- temp[count] = '\0';
- length[subCount] = count;
- subCount++;
-
- //计算出长度数组中至最大的元素
- int maxLength = length[0];
- for(int i = 0; i<subCount; i++)
- {
- if(maxLength < length[i])
- {
- maxLength = length[i];
- }
- //打印子字符串数组和长度数组中的每一个元素,他们是相互对应的
- printf("%s, %i\n", subStr[i], length[i]);
- }
- //打印数组中长度最大的值
- printf("maxlength: %i\n", maxLength);
-
- //遍历子字符串数组,找到长度最长的子字符串,打印,可能是多个。。
- for(int i = 0; i<subCount; i++)
- {
- if(strlen(subStr[i]) == maxLength)
- {
- printf("max long string : %s\n", subStr[i]);
- }
- //将对上的空间都释放掉。
- free(subStr[i]);
- }
-
复制代码 |
|