我需要在C中编写一个获取“ char * str”的函数(void),该字符串包含定界符(char * delimiters =“?:,-space”)。该函数需要更新字符串本身,以便最长的单词将以大写字母书写。
到目前为止,这是我的代码:
void
longestInCaptital(char *str)
{
char *delimiters = "?:,- ";
char copyOfStr[strlen(str)];
strcpy(copyOfStr, str);
char *temp = strtok(copyOfStr, delimiters);
int maxLetters = 0;
char *tempIndex;
while (temp) {
if (strlen(temp) > maxLetters) {
maxLetters = strlen(temp);
tempIndex = temp;
}
temp = strtok(NULL, delimiters);
}
str = tempIndex;
int i;
for (i = 0; i < maxLetters; i++) {
str[i] = toupper(str[i]);
}
}
我试图使它工作,但是不能,
谢谢你的帮手!
最佳答案
你很近。您只需要将副本中最大字符串开头的偏移量应用于原始地址即可。
另外,请注意,copyOfStr
必须为+1
才能说明EOS字符。
注意:我尚未测试:
void
longestInCaptital(char *str)
{
char *delimiters = "?:,- ";
char copyOfStr[strlen(str) + 1];
strcpy(copyOfStr, str);
int maxLetters = 0;
char *tempIndex = NULL;
char *temp = strtok(copyOfStr, delimiters);
while (temp) {
int curlen = strlen(temp);
if (curlen > maxLetters) {
maxLetters = curlen;
tempIndex = temp;
}
temp = strtok(NULL, delimiters);
}
int i;
// get starting offset within _original_ string
str += (tempIndex - copyOfStr);
for (i = 0; i < maxLetters; i++) {
str[i] = toupper(str[i]);
}
}