Советы о том, как прочитать последнее слово в массиве символов в C - PullRequest
2 голосов
/ 24 октября 2010

Просто смотрю, чтобы указывать в правильном направлении:

Имею стандартный ввод для программы на С, я взял каждую строку за раз и сохранил в символе [].

Теперь, когда у меня есть символ [], как мне взять последнее слово (просто предполагая, что он разделен пробелом), а затем преобразовать в строчные буквы?

Я пробовал это, но программа просто зависает:

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 ]

1 голос
/ 24 октября 2010

Проблема с вашим кодом в том, что он будет многократно читать первое слово предложения в слово . Он не будет переходить к следующему слову каждый раз, когда вы его называете. Так что, если у вас есть это в качестве кода:

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

Затем каждый раз, когда вызывается sscanf, он загружает «this» в word . И так как он читает 1 слово каждый раз, sscanf будет всегда возвращать 1.

1 голос
/ 24 октября 2010

Если бы мне пришлось это сделать, я бы, вероятно, начал с strrchr.Это должно дать вам начало последнего слова.Оттуда просто пройтись по символам и перевести их в нижний регистр.О, есть небольшая деталь, которую вам придется сначала удалить любые символы в конце пробела.

0 голосов
/ 24 октября 2010

Это поможет:

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) ;
0 голосов
/ 24 октября 2010

'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();
}
...