C程序设计 (第四版) 谭浩强 习题7.7
习题 7.7 写一个函数,将一个字符串中的元音字母复制到另一字符串,然后输出。
IDE工具:VS2010
Note: 使用不同的IDE工具可能有部分差异。
代码块
方法1:使用数组
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void vowelsCopy(char newstr[], char str[]){
int len = strlen(str);
int k = 0;
for(int i = 0; i < len; i++){
if(str[i] == 'a' || str[i] == 'A' || str[i] == 'e' || str[i] == 'E' || str[i] == 'i' || str[i] == 'I' || str[i] == 'o' || str[i] == 'O' || str[i] == 'u' || str[i] == 'U'){
newstr[k++] = str[i];
}
}
/*注释部分是另外一种写法,时间复杂度会增加
char vowels[10] = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
for(int i = 0; i < len; i++){
for(int j = 0; j < 10; j++){
if(str[i] == vowels[j]){
newstr[k++] = str[i];
}
}
}*/
newstr[k] = '\0';
}
int main(){
char str[80], newstr[80];
printf("Enter string: ");
gets(str);
vowelsCopy(newstr, str);
printf("New String: %s\n", newstr);
system("pause");
return 0;
}
方法2:使用指针、动态分配内存
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 80
void initialStr(char **str, int n){
*str = (char*)malloc(n * sizeof(char));
}
void inputStr(char *str){
printf("Enter string: ");
gets(str);
}
void vowelsCopy(char newstr[], char str[]){
int len = strlen(str);
int k = 0;
for(int i = 0; i < len; i++){
if(str[i] == 'a' || str[i] == 'A' || str[i] == 'e' || str[i] == 'E' || str[i] == 'i' || str[i] == 'I' || str[i] == 'o' || str[i] == 'O' || str[i] == 'u' || str[i] == 'U'){
newstr[k++] = str[i];
}
}
/*注释部分是另外一种写法,时间复杂度会增加
char vowels[10] = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
for(int i = 0; i < len; i++){
for(int j = 0; j < 10; j++){
if(str[i] == vowels[j]){
newstr[k++] = str[i];
}
}
}
*/
newstr[k] = '\0';
}
void outputStr(char *str){
printf("New String: %s\n", str);
}
int main(){
char *str = NULL;
char *newstr = NULL;
initialStr(&str, N);
initialStr(&newstr, N);
inputStr(str);
vowelsCopy(newstr, str);
outputStr(newstr);
free(str);
free(newstr);
system("pause");
return 0;
}