2

只是希望指向正确的方向:

对 C 程序有标准输入,我一次输入每一行并存储在 char[] 中。

现在我有了 char[],我如何取最后一个单词(假设用空格分隔)然后转换为小写?

我试过这个,但它只是挂起程序:

while (sscanf(line, "%s", word) == 1)
    printf("%s\n", word);

采取了建议并提出了这一点,是否有更有效的方法来做到这一点?

char* last = strrchr(line, ' ')+1;

while (*last != '\0'){   
    *last = tolower(*last);
    putchar((int)*last);
    last++;
}
4

4 回答 4

1

如果我必须这样做,我可能会从strrchr. 这应该让你最后一个词的开头。从那里开始,只需遍历字符并转换为小写即可。哦,有一个小细节,您必须先删除任何尾随空格字符。

于 2010-10-24T15:15:55.910 回答
1

您的代码的问题是它会将句子的第一个单词重复读入word。每次调用它时,它都不会移动到下一个单词。所以如果你有这个作为你的代码:

char * line = "this is a line of text";

然后每次调用 sscanf 时,它都会将“this”加载到word中。而且由于它每次读取 1 个单词,因此 sscanf 将始终返回 1。

于 2010-10-24T15:19:30.787 回答
0

这将有助于:

char dest[10], source [] = "blah blah blah!" ;
int sum = 0 , index =0 ;
while(sscanf(source+(sum+=index),"%s%n",dest,&index)!=-1);
printf("%s\n",dest) ;
于 2010-10-24T15:27:19.887 回答
0

'strtok' 将根据某些定界符拆分输入字符串,在您的情况下,定界符将是一个空格,因此它将返回一个“单词”数组,您只需使用最后一个。

http://www.cplusplus.com/reference/clibrary/cstring/strtok/

可以说明执行此操作的许多不同方法,然后确定哪种方法具有最佳性能和可用性特征,或者每种方法的优缺点,我只是想用一个代码片段来说明我上面提到的内容。

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

int main()
{
    char line[] = "This is a sentence with a last WoRd ";

    char *lastWord = NULL;
    char *token = strtok(line, " ");
    while (token != NULL)
    {
        lastWord = token;
        token = strtok(NULL, " ");      
    }

    while (*lastWord)
    {
        printf("%c", tolower(*lastWord++));
    }

    _getch();
}
于 2010-10-24T15:20:24.007 回答