我需要将字符串中的元音更改为使用C的$。我知道我需要使用for循环,我很确定我是在正确的轨道但我不能让它工作
这是我的代码:
#include <stdio.h>
#include <string.h>
int main(void)
{
char input[50];
char i;
int j = 0;
printf("Please enter a sentence: ");
fgets(input, 50 , stdin);
for (j = 0; input[i] != '\0'; j++)
if (input[i]=='a'||input[i]=='e'||input[i]=='i'||input[i]=='o'||input[i]=='u')
{
input[i]= '$';
printf("Your new sentence is: %s", input);
}
return 0;
}
我知道我的错误不是很大但我看不到它。这是作业,所以我不想要一个解决方案,只需要一些建议,这样我才能真正从中学习。
编辑:
感谢那些家伙,我摆脱了'j',它现在有效,但是当我运行程序时,它为每个元音改变输出一个新行。我如何编码它以便它只输出最后一行,即所有的元音都改变了?
答案 0 :(得分:6)
你对索引犯了一个小错误:
for (j = 0; input[i] != '\0'; j++)
^ ^
应该是
for (i = 0; input[i] != '\0'; i++)
实际上,您可以省略j
:
int main(void)
{
char input[50];
int i;
printf("Please enter a sentence: ");
fgets(input, 50 , stdin);
for (i = 0; input[i] != '\0'; i++)
{
if (input[i]=='a'||input[i]=='e'||input[i]=='i'||input[i]=='o'||input[i]=='u')
{
input[i]= '$';
}
}
printf("Your new sentence is: %s", input);
return 0;
}
答案 1 :(得分:0)
每次撰写input[i];
时,都应该input[j]
答案 2 :(得分:0)
根据for-loop对变量建立索引。像这样替换你的for循环:
for (j = 0; input[j] != '\0'; j++)
{
if (input[j]=='a'||input[j]=='e'||input[j]=='i'||input[j]=='o'||input[j]=='u')
{
input[j]= '$';
//printf("Your new sentence is: %s", input); //move this outside the loop
}
}
所以整个代码就像这样:
#include <stdio.h>
#include <string.h>
int main(void) {
char input[50];
char i;
int j = 0;
printf("Please enter a sentence: ");
fgets(input, 50 , stdin);
printf ("\ninput: %s", input);
for (j = 0; input[j] != '\0'; j++)
{
if (input[j]=='a'||input[j]=='e'||input[j]=='i'||input[j]=='o'||input[j]=='u')
{
input[j]= '$';
}
}
printf("Your new sentence is: %s", input);
return 0; }
答案 3 :(得分:0)
String input = "My name is jitender rana"; // here give your input
System.Text.StringBuilder sb = new System.Text.StringBuilder(); // taken to concatenate the string
for( Int32 i = 0; i<input.Length; i++)
{
if ((input[i].ToString().ToLower() == "a") || (input[i].ToString().ToLower() == "e") || (input[i].ToString().ToLower() == "i") || (input[i].ToString().ToLower() == "o") || (input[i].ToString().ToLower() == "u"))
{
// output += input.Replace(input[i].ToString(), "_");
sb.AppendLine(input[i].ToString().Replace(input[i].ToString(), "_"));
}
else
{
sb.AppendLine(input[i].ToString());
}
}
Response.Write(sb.ToString());
答案 4 :(得分:0)
您可能还需要照顾大写的元音。在已经共享的代码示例中,也请使用大写形式以确保完整性。另外,使用switch
构造比使用一系列逻辑OR更为有效。
答案 5 :(得分:-1)
这是i,j的问题。你使用了i,但从未增加它。
答案 6 :(得分:-2)
#include <stdio.h>
int main()
{
int z=1,i;
char arr[100];
printf("enter a word");
scanf("%[^\n]s",arr);
for(i=0;arr[i]!='\0';i++)
{
switch(arr[i])
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
printf("%d",z);
z++;
break;
default:
printf("%c",arr[i]);
}
}
}