我正在学习C,我不理解在调用函数ayInFrontOfConsonant()和replaceChars()之后打印字符串myString时得到的输出。此练习阶段的目标是用户可以输入字符串。然后应该像这样打印字符串:所有小写元音应该用字母'a'替换,并且在每个单词前面以辅音开头,应该添加字母“ay”。当我输入字符串“我喜欢写C代码”时,输出应该是:“我aylaka aywrating ayC aycada”。我得到这个输出但是在这个字符串的末尾我得到了一些奇怪的符号。它就像是字符串的72个字符,其中一些字符在内存中是随机的。
我非常感谢您提供的任何帮助。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void insertChar(char *str, char aChar, int index)
{
int i=0;
for(i=strlen(str);i>=index;i--) //sizeof of strlen???
{
str[i]=str[i-1];
}
str[index]=aChar;
}
void ayInFrontOfConsonant(char *str)
{
char *consonants="bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ";
int i=0,j=0;
for ( i = 0;i<strlen(str) ; i++)
{
for ( j = 0; j < strlen(consonants); j++)
{
if (str[i] == consonants[j] && i==0)
{
insertChar(str, 'y', i);
insertChar(str,'a',i);
break;
}
else if(i!=0 && str[i-1]==' ' && str[i] == consonants[j])
{
printf("i=%d\n",i);
insertChar(str, 'y', i);
insertChar(str,'a',i);
break;
}
}
}
}
int replaceChars(char str[], char sChar[], char rChar)
{
int cnt=0,i=0,j=0;
for(i=0;i<strlen(str);i++)
{
for(j=0;j<strlen(sChar);j++)
{
if(str[i]==sChar[j])
{
str[i]=rChar;
cnt++;
}
}
}
return cnt;
}
int main()
{
printf("** Welcome to the Double Dutch game **\n");
char myString[72];
printf("Please enter a string: ");
scanf("%[^\n]s", myString);
replaceChars(myString, "eiou", 'a');
ayInFrontOfConsonant(myString);
printf("Double dutch traslation: %s\n",myString);
return 0;
}