簡體   English   中英

字符串C ++中的元音

[英]Vowels in string C++

我應該輸入字符串,我的程序應該重新組織元素,所以塞爾維亞元音(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;

}

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));

在這里看演示

另外,避免使用gets ,使用帶有C ++的std::getline

雖然您使用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++;
}

是無效的,沒有任何意義。

使用strchr:

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

我只想添加一條評論,但名聲太小......在我看來:

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

是錯誤的方式,肯定它應該是“元音[k] = s [i],k ++”,可以改進為“元音[k ++] = s [i]”。 當然,輔音也一樣。

另外,在執行strcat之前,你應該在兩個字符串中添加一個終止零字符:

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

否則字符串沒有正確終止 - 你不能假設char數組初始化為全零。

當然保羅上面的建議是一種檢測元音的更簡潔的方法......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM