字符串C ++中的元音

时间:2014-02-16 12:10:32

标签: c++ string

我应该输入字符串,我的程序应该重新组织元素,所以塞尔维亚元音(a,o,i,e,u)应该是第一个元素然后是辅音。我的想法是复制第二个字符串中的元音和第三个中的辅音然后制作一个字符串(使用strcat和元音和辅音字符串)但是没有按计划工作......任何想法要改变什么或如何做?

#include <stdio.h>
#include <string.h>

int main()
{
    char s[50],s2[50];
    char vowels[50];
    char consonant[50];
    int k=0,f=0; 

    printf("Type string:\n");
    gets(s);


    for(int i;i<strlen(s);i++)
    {
        if(s[i]={'A','O','I','E','U','a','o','i','e','u'}) s[i]=vowels[k],k++;
        else  s[i]=consonant[f],f++;
    }

    strcat(vowels,consonant);

     printf("%s",vowels);

    return 0;

}

4 个答案:

答案 0 :(得分:1)

if(s[i]={'A','O','I','E','U','a','o','i','e','u'})不是合法的C ++

考虑使用std::strchr,并使用您的C风格逻辑。

分手(元音和辅音)的更好方法可能是: 使用std::partition(因为它标记为C ++)

bool is_vowel(char ch) { return std::strchr("aeiouAEIOU", ch) != NULL ; }

std::string s; //use std::string
std::string::const_iterator p =
        std::partition(s.begin(), s.end(), 
                       std::ptr_fun(is_vowel));

请参阅演示here

另外,请避免使用gets,将std::getline与C ++一起使用

答案 1 :(得分:1)

虽然您使用C ++定位了您的问题,但似乎您处理的是C。

尝试以下代码。

#include <stdio.h>
#include <string.h>

int main( void )
{
    const size_t N = 50;
    const char vowels[] = { 'A', 'O', 'I', 'E', 'U', 'a', 'o', 'i', 'e', 'u', '\0' };
    char s[N], s1[N], s2[N];

    printf( "Type string: " );
    fgets( s, N, stdin );

    char *p1 = s1,*p2 = s2;
    for ( char *q = s; *q; ++q )
    {
        if ( strchr( vowels, *q ) )
        {
            *p1++ = *q;
        }
        else
        {
            *p2++ = *q;
        }
    }

    *p1 = '\0';
    *p2 = '\0';

    strcpy( s, s1 );
    strcat( s, s2 );

    printf( "result string: \"%s\"", s );

    return 0;
}

如果您的编译器不支持C99,则按以下方式更改循环

    char *q = s, *p1 = s1,*p2 = s2;
    for ( ; *q; ++q )

并将所有变量定义放在main

的开头

也替换

const size_t N = 50;

#define N 50

至于你的代码那么这个结构

for(int i;i<strlen(s);i++)
{
    if(s[i]={'A','O','I','E','U','a','o','i','e','u'}) s[i]=vowels[k],k++;
    else  s[i]=consonant[f],f++;
}

无效且无意义。

答案 2 :(得分:0)

使用strchr:

#include <cstring>
const char* vowel = "aeiouAEIOU";
//...
const char* p = strchr(vowel, str[i]);
if ( p )
{
    // p points to the vowel found
}

答案 3 :(得分:0)

我只是添加一条评论,但名声太少......在我看来:

s [i] =元音[k],k ++

是错误的方式,肯定应该是“元音[k] = s [i],k ++”,可以改进为“元音[k ++] = s [i]”。当然,辅音也一样。

此外,在执行strcat之前,您应该在两个字符串中添加一个终止零字符:

vowels[k] = (char)0;
consonant[f] = (char)0;

否则字符串未正确终止 - 您不能假设char数组初始化为全零。

当然,上面保罗的建议是一种检测元音的更简洁的方法......