c - 在字符串中查找按字典顺序排列的最大单词 - C 指针
问题描述
编辑:编辑了一切对不起误解。
我正在尝试编写一个函数来查找字符串中按字典顺序排列的最大单词。
一个词是这样定义的:包含一个字母 - 可以使用 isalpha() - 不包含空格 - 可以使用 isspace()
如果 s = "He llo 世界"
s 包含以下单词:he、llo、wor、l、d。
要查找两个字符串之间的字典顺序最大的单词,我可以使用 strcmp。
函数原型是: char *biggestWord(char *s) 它应该返回字典上最大的单词。
我真的坚持了几个小时。这是我试图做的:
我被困在下一步该怎么做。如果连续有两个空格,我的算法想法甚至都行不通。
char *biggestWord(char *s) {
//We will find the first string and compare it to each one of the new strings
//We will keep the value of the higher string everytime
char *res;
char *temp;
int indexStart = 0; //Will contain the index of the first character to then store on temp
int indexEnd = 0; //Will contain the index of the last character to then store on temp
for(int i = 0; s[i] != '\0'; i++) {
if(isspace(s[i])) {
indexEnd = i - 1;
temp = myStrCpy(s, indexStart, indexEnd); //Will extract the string using start and end index, and put it into temp
indexStart = i+1;
}
}
}
解决方案
这是一个可能的解决方案:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char* biggestWord(char* s)
{
// Create a buffer for bigest word
char* buf = calloc(strlen(s) + 1, sizeof(char));
if (buf == NULL)
return NULL;
// Create a buffer for current word
char* word = malloc(strlen(s) + 1 * sizeof(char));
if (word == NULL)
return NULL;
int j = 0;
for (int i = 0; s[i]; i++) {
if (isspace(s[i])) {
// We found end of word, replace the space by a nul byte
strncpy(word, s + j, i - j);
word[i - j] = 0; // nul terminate
if (strcmp(buf, word) < 0) {
// we got a bigger word according to strcmp()
strcpy(buf, word);
// skip remaining spaces
while (s[i] && isspace(s[i]))
i++;
// Remember where a word starts
j = i;
}
}
}
free(word);
return buf; // cAller must call free()
}
void main(void)
{
char* res = biggestWord("He llo wor l d ");
if (res) {
printf("Result=\"%s\"", res);
free(res);
}
}
biggestWord
返回指向动态分配的字符串的指针,因此它必须由调用者释放。
推荐阅读
- git - 从 git-svn 迁移到 git
- swift - “ViewController”类型的值没有成员“ref”;您指的是 'self' 吗?firebase 迅速出错
- c++ - Value * -> getName 返回空字符串 LLVM
- java - 让接口提供实现它的类的实例
- python - Pandas - 使用算术向数据框添加新行
- c# - 如何在客户端手动验证身份服务器访问令牌
- jquery - 从多个 ASP 链接按钮发送引导模式多个数据
- java - ViewPager 和他的片段
- mongodb - Mongoose pre-hook 中的循环引用问题
- c# - 计算 4x3 阵列中 AOE 命中的插槽