[英]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.