c中按字母顺序排列的第一个和最后一个单词

时间:2014-03-20 09:21:49

标签: c string

这是一个c prog,它用空格分隔5个单词,并按字母顺序给出第一个和最后一个单词。例如,输入5个字:banana ap pa kiwi orange。第一个单词= ap last word = pa.No错误显示但是prog没有工作,就像接受了超过5个单词。这是我的代码:

void findWord(char word[][20], char *first, char *last);
int main()
{
    char word[5][20];
    char *first, *last;

    printf("Enter 5 words separated by spaces: \n");
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 20; j++)
            scanf("%c", &word[i][j]);

    }
    first = word[0][0];
    last = word[0][0];

    findWord(word, &first, &last);
    printf("The first word is: %s and the last word is: %s  ", first, last);

}

void findWord(char word[][20], char *first, char *last)
{
    int k, l;

    for (k = 0; k < 5; k++)
    {
        for (l = 0; l < 20; l++)
        {
            while ((word[k][l] != '\0') && (word[k][l] == ' '))
            {
                if (word[k][l + 1]< *first)
                    *first = word[k][l + 1];
                else 
                    *last = word[k][l + 1];
            }
        }
    }
}

3 个答案:

答案 0 :(得分:0)

比较您可以使用strcmp()家庭功能的字符串并按字母顺序排序。
而不是使用循环

for (l = 0; l < 20; l++)
        {
            while ((word[k][l] != '\0') && (word[k][l] == ' '))
            {
                if (word[k][l + 1]< *first)
                    *first = word[k][l + 1];
                else 
                    *last = word[k][l + 1];
            }
        }

使用strcmp()比较单词并对其进行排序或获得第一个和最后一个vaule。 strcmp可以使程序简单直接地解决。

答案 1 :(得分:0)

在while循环中你应该使用&#39; ||&#39;而不是&#39;&amp;&amp;&#39;这里。尝试逐步调试您的程序。

答案 2 :(得分:0)

试试这个

#include<stdio.h>
#include<string.h>
void findWord(char word[][20], char *first, char *last);
int main()
{
    char word[5][20];
    char first[20], last[20];
int i,j;    

    printf("Enter 5 words separated by spaces: \n");
    for (i = 0; i < 5; i++)
    {
       scanf("%s", word[i]);

    }
    strcpy(first,word[0]);
    strcpy(last,word[0]);

    findWord(word, first, last);
    printf("The first word is: %s and the last word is: %s  ", first, last);

}

void findWord(char word[][20], char *first, char *last)
{
    int k;

    for (k = 0; k < 5; k++)
    {
    if(strcmp(word[k], last)>0)
        strcpy(last,word[k]);
    else if(strcmp(word[k],first)<0)
        strcpy(first,word[k]);
    }
}