首页 > 解决方案 > 为什么这个猪拉丁词转换代码不起作用

问题描述

猪拉丁词转换

#include<stdio.h>
#include<string.h>
int main()
{
    char s[100],pg[100];
    int len,i,j,k;
    printf("Enter a word: ");
    scanf("%[^\n]s",s);
    len=strlen(s);
    for(i=0;i<len;i++)
    {
        if(s[i]>=65&&s[i]<=90)
        {
            s[i]=s[i]+32;
        }
    }
    for(i=0;i<len;i++)
    {
        if(s[i]=='a'|| s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u')
        {
            break;
        }
    }
    pg[len]='a';
    pg[len+1]='y';
    for(j=0;j<len-i;j++)
    {
        pg[j]=s[i+j];
    }
    for(k=0;k<i;k++)
    {
        pg[j+k]=s[k];
    }
    printf("Pig Latin word is: %s",pg);
}

我在任何步骤检查了这些字母是否不是分配的所需字母。但不是。通过而不是使用该行

printf("Pig Latin word is: %s",pg);

如果我使用

for(i=0;i<len+2;i++)
    {
        printf("%c",pg[i]);
    }

它显示正确。为什么

标签: c

解决方案


您的代码按原样对我有用,但这可能是运气。您仍然需要零终止您的字符串,因为声明为局部变量的数组不一定初始化为零。尝试添加:

pg[len + 2] = '\0';

不相关,但也考虑在 printf 格式字符串中包含换行符:

printf("Pig Latin word is: %s\n", pg);

如果你给它一个字符串,你的代码也会中断

this string is over 100 characters long this string is over 100 characters long this string is over 100 characters long

您需要确保进行正确的边界检查。


推荐阅读