int i=0,j=0;
char string[100], string2[100];
scanf("%s",&string);
while (string[i]!='\0'){
if(string[i]=='a' || string[i]=='e' || string[i]=='i' || string[i]=='o' || string[i]=='u' || string[i]=='A' || string[i]=='E' || string[i]=='I' || string[i]=='O' || string[i]=='U'){
string[i]=string2[j];
}
string[i] = tolower(string[i]);
string[i] = string2[j];
string2[j-1]='.';
}
printf("%s", string2);
return 0;
问题是输入一个单词,然后删除所有元音,添加“.”在每个常量之后并将所有大写字母变为小写。
最佳答案
由于 string
是一个数组,因此在将其传递给 scanf()
时不使用 &
,这给你一个双指针并且是一个错误。每当您发现自己有 10 个子句 if
语句时,您只是在自问问题(例如,很容易被拼写错误绊倒。)您可以使用 index()< 简化此测试
和包含所有元音的字符串。在编写代码时添加注释以指示每个部分实现哪些要求不会有什么坏处。每次循环时,i
变量都需要递增,每次向 string2
添加新字符时,j
变量都需要递增。在 scanf()
之后,您不应该分配给 string
,将其视为只读,仅分配给 string2
. j-1
不应该发生。最后,由于 string2
未初始化,因此其中可能存在垃圾,并且您尚未将其 null 终止。把它们放在一起:
#include <ctype.h>
#include <stdio.h>
#include <strings.h>
#define VOWELS "AEIOUaeiou"
int main()
{
char string[100], new_string[100] = { 0 };
// enter a word
scanf("%s", string);
for (int i = 0, j = 0; string[i] != '\0'; i++)
{
// remove all vowels
if (index(VOWELS, string[i]) == NULL)
{
// make all upper case letters lower case
new_string[j++] = tolower(string[i]);
if (isalpha(string[i]))
{
new_string[j++] = '.'; // add '.' after every consonant
}
}
}
printf("%s\n", new_string);
return 0;
}
我假设“在每个常量之后”的意思是“在每个辅音之后”,否则请澄清您所说的“常量”的含义。
关于c - C程序空白输出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38173209/