如何将字符串中的元音更改为符号?

时间:2011-11-22 13:05:57

标签: c loops

我需要将字符串中的元音更改为使用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',它现在有效,但是当我运行程序时,它为每个元音改变输出一个新行。我如何编码它以便它只输出最后一行,即所有的元音都改变了?

7 个答案:

答案 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]);
    }
   }
 }