这个程序有什么问题? (字符串相关)

时间:2017-03-08 14:10:34

标签: c

我试图在以下程序中找到错误。

如果我输入"这是测试",输出显示"这是A"。我试图找出原因"测试"不见了。

请帮我理解这个问题。提前谢谢。

#include<stdio.h>
#include<string.h>

int main()
{
    char str[1000], word[100];
    int i, j, length, is_word_started;

    gets(str);
    length=strlen(str);
    is_word_started=0;

    for(i=0, j=0; i<length; i++)
    {
        if(str[i]>='a' && str[i]<='z')
        {
            if(is_word_started==0)
            {
                is_word_started=1;
                word[j]='A'+str[i]-'a';
                j++;
            }
            else
            {
                word[j]=str[i];
                j++;
            }
        }
        else if(str[i]>='A' && str[i]<='Z' || str[i]>='0' && str[i]<='9')
        {
            if(is_word_started==0)
            {
                is_word_started=1;

            }
            word[j]=str[i];
            j++;
        }
        else
        {
            if(is_word_started==1)
            {
                is_word_started=0;
                word[j]='\0';
                printf("%s\n", word);
                j=0;
            }
        }
    }

    return 0;
}

1 个答案:

答案 0 :(得分:2)

您必须重复

if(is_word_started==1)
{
    is_word_started=0;
    word[j]='\0';
    printf("%s\n", word);
    j=0;
}

for ()周期之外(在}的最后)

否则,当您完成对str的解析后,您在word中积累的字母将丢失&#34;。

从技术上讲,你可以将它缩短为:

if(is_word_started==1)
{
    word[j]='\0';
    printf("%s\n", word);
}

因为之后您不会重复使用这些变量。

除了&#34;从不使用gets()&#34; @usr建议你应该正确地调整word的大小:总是使用最坏的情况。如果str[1000]word[1000]