字符数组中的递归函数,用于在数组的前 3 个元素中查找辅音
Recursive function in a character array for finding a consonant in the first 3 elements in the array
为了更清楚,在数组的前三个元素(字符)中搜索并找到辅音,并将其放在第一个元素上。例如,我们将采用一个字符数组 A[] 。
前三个元素是 A[i], A[i+1], A[i+2] ,如果辅音在 A[i+1] 上应该移动到 A[i]
那是 A[i]=A[i+1] ...很难解释它,但希望你们明白我的意思。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int changeup(char* a[],int k,int j, int x)
{
int i=0;
if(*a[k]!='a' || 'e' || 'i' || 'o' || 'u')
a[x]=a[k];
return changeup(a,k++,x++,j++);
if(*a[j]!='a' || 'e' || 'i' || 'o' || 'u')
a[x]=a[j];
return changeup(a,k++,x++,j++);
if(*a[x]!='a' || 'e' || 'i' || 'o' || 'u')
return changeup(a,k++,x++,j++);
else {
return;
}
int main (void)
{
char * a[5];
int i=0,j,k,x,n;
char* p;
n=sizeof(a)/sizeof(a[0]);
k=i+2;
j=i+1;
x=i;
*p=changeup(a,k,j,x);
for(i=0;i<n;i++){
printf("%s",a[i]);
}
return 0;
}
}
您也许可以利用这个元音测试功能。
#include <ctype.h>
//return 1 if ch is a vowel
int vowel (int ch) {
int chl = tolower(ch);
return (chl=='a' || chl=='e' || chl=='i' || chl=='o' || chl=='u');
}
...
if (!vowel(a[k])) { // if a consonant
...
}
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
static inline bool vowel(char ch){
char lch = tolower(ch);
return lch == 'e' || lch == 'a' || lch == 'i' || lch == 'o' || lch == 'u';
}
static inline bool consonant(char ch){
return isalpha(ch) && !vowel(ch);
}
void proc(char *s){
bool moved = false;
int i;
for(i = 0; i < 3; ++i){
if(!s[i])
return;
if(!moved && consonant(s[i])){
moved = true;
s[0] = s[i];
}
}
proc(s + 3);
}
int main(void){
char str[] = "Tarantino";
proc(str);
printf("%s\n", str);//Tarnntnno
return 0;
}
为了更清楚,在数组的前三个元素(字符)中搜索并找到辅音,并将其放在第一个元素上。例如,我们将采用一个字符数组 A[] 。 前三个元素是 A[i], A[i+1], A[i+2] ,如果辅音在 A[i+1] 上应该移动到 A[i] 那是 A[i]=A[i+1] ...很难解释它,但希望你们明白我的意思。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int changeup(char* a[],int k,int j, int x)
{
int i=0;
if(*a[k]!='a' || 'e' || 'i' || 'o' || 'u')
a[x]=a[k];
return changeup(a,k++,x++,j++);
if(*a[j]!='a' || 'e' || 'i' || 'o' || 'u')
a[x]=a[j];
return changeup(a,k++,x++,j++);
if(*a[x]!='a' || 'e' || 'i' || 'o' || 'u')
return changeup(a,k++,x++,j++);
else {
return;
}
int main (void)
{
char * a[5];
int i=0,j,k,x,n;
char* p;
n=sizeof(a)/sizeof(a[0]);
k=i+2;
j=i+1;
x=i;
*p=changeup(a,k,j,x);
for(i=0;i<n;i++){
printf("%s",a[i]);
}
return 0;
}
}
您也许可以利用这个元音测试功能。
#include <ctype.h>
//return 1 if ch is a vowel
int vowel (int ch) {
int chl = tolower(ch);
return (chl=='a' || chl=='e' || chl=='i' || chl=='o' || chl=='u');
}
...
if (!vowel(a[k])) { // if a consonant
...
}
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
static inline bool vowel(char ch){
char lch = tolower(ch);
return lch == 'e' || lch == 'a' || lch == 'i' || lch == 'o' || lch == 'u';
}
static inline bool consonant(char ch){
return isalpha(ch) && !vowel(ch);
}
void proc(char *s){
bool moved = false;
int i;
for(i = 0; i < 3; ++i){
if(!s[i])
return;
if(!moved && consonant(s[i])){
moved = true;
s[0] = s[i];
}
}
proc(s + 3);
}
int main(void){
char str[] = "Tarantino";
proc(str);
printf("%s\n", str);//Tarnntnno
return 0;
}