关于如何在C中读取字符数组中的最后一个'单词'的提示

时间:2010-10-24 15:08:42

标签: c scanf stdio fgets

只是指向正确的方向:

对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 个答案:

答案 0 :(得分:1)

如果我必须这样做,我可能会从strrchr开始。这应该是你的最后一句话的开头。从那里开始,这是一个简单的问题,即走遍人物并转换为小写。哦,有一个小细节,你必须先删除任何尾随空格字符。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分: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();
}

答案 3 :(得分: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) ;