注:
本小节多使用gets()输入事先不知道长度大小的字符串。
————————————分割线————————————
习题7-5 字符串逆序存放
题目描述
写一个函数将一个字符串按反序存放。在主函数中输入一个字符串,通过调用该函数,得到该字符串按反序存放后的字符串,并输出。
输入
一行字符串。
输出
输入字符串反序存放后的字符串。单独占一行。
样例输入
abcd
样例输出
dcba
程序
#include<stdio.h>
#include<string.h>
void reverse(char str[]){
int flag, length = strlen(str);
char temp; //交换的中间变量
//以flag作为数组长度单双数的标志
if(length%2 == 0) flag=0;
else flag=1;
//对数组元素进行反序交换
//只需要一层循环即可
for(int i=0; i<length/2; i++){
temp = str[i];
str[i] = str[length-i-1];
str[length-i-1] = temp;
}
puts(str);
//结果出不来时可以再多定义一个字符串,存放反序结果。
}
int main(){
char str[20];
gets(str); //在不知道字符串大小的前提下可以用gets函数输入字符串
reverse(str);
}
———————————————————————————
习题7-7 复制字符串中的元音字母
【OJ内表示答案错误】
———————————————————————————
题目描述
写一个函数,将一个字符串中的元音字母复制到另一个字符串中。在主函数中输入一个字符串,通过调用该函数,得到一个有该字符串中的元音字母组成的一个字符串,并输出。
输入
一个字符串(一行字符)。
输出
该字符串所有元音字母构成的字符串。行尾换行。
样例输入
CLanguage
样例输出
auae
提示
可以采用如下函数原型
void vowels(char s1[], char s2[]);
程序
#include<stdio.h>
#include<string.h>
void vowels(char s1[], char s2[]){
int i, j;
for(i=0, j=0; i<strlen(s1); i++){
//大写元音字母
if(s1[i] == 'A'||s1[i] == 'E'||s1[i] == 'I'||s1[i] == 'O'||s1[i] == 'U'){
s2[j]=s1[i];
j++;
continue;
}
//小写元音字母
if(s1[i] == 'a'||s1[i] == 'e'||s1[i] == 'i'||s1[i] == 'o'||s1[i] == 'u'){
s2[j]=s1[i];
j++;
continue;
}
}
s2[j]='\0'; //字符串必须有'\0'作为结束标志,而s1不需要加是因为调用gets函数,函数里会自动加。
for(i = 0; i < strlen(s2); i++) printf("%c",s2[i]);
printf("\n");
}
int main(){
char s1[50], s2[50];
gets(s1); //在不知道字符串大小的前提下可以用gets函数输入字符串
vowels(s1, s2);
return 0;
}