C Primer Plus (中文版)第11章编程练习 参考答案(仅供参考~)
C Primer Plus (中文版)第11章编程练习 参考答案(仅供参考~)
🌴 C Primer Plus第11章编程练习~ 加油加油!🍭
🍭感觉这一章,比较吃力~ 很迟没有更新了,也有自己的原因 ~
2023的最后一天啦~ 🌈期待新的一年 2024! 一起闪闪发光~??
??欢迎大家讨论 批评指正~
第1题
🍎1.设计并测试一个函数,从输入中获取下n个字符(包括空白、制表
符、换行符),把结果储存在一个数组里,它的地址被传递作为一个参数。
#include<stdio.h>
#include<string.h>
#define N 20
void get(int n,char *data);
int main(void){
char data[N];
printf("please enter:");
get(N,data);
return 0;
}
void get(int n,char *data){
fgets(data,n,stdin);
fputs(data,stdout);
}
第2题
🍐修改并编程练习1的函数,在n个字符后停止,或在读到第1个空白、制表符或换行符时停止,哪个先遇到哪个停止。不能只使用scanf()。
/*
* @Description: 修改并编程练习1的函数,在n个字符后停止,或在读到第1个空白、
制表符或换行符时停止,哪个先遇到哪个停止。不能只使用scanf()。
* @Author: ~光~~
* @Date: 2023-12-21 16:43:40
* @LastEditTime: 2023-12-28 18:56:33
* @LastEditors:
*/
#include<stdio.h>
#define N 10
void get(char data[],int n);
void get1(char data[],int n);
int main(void){
char data[N];
get(data,N);
return 0;
}
void get(char data[],int n){
int i;
fgets(data,n,stdin);
printf("the orginal data are:");
fputs(data,stdout);
while(*data!='\n'&& *data!='\0'){
if(*data=='\t' || *data=='\t' || *data==' ') *data='\0';
data=data+1;
}
printf("\nafter the function the data are:");
fputs(data-2,stdout);
}//关于指针的都不太会
void get1(char data[],int n){
int i=0;
fgets(data,n,stdin);
printf("the orginal data are:");
fputs(data,stdout);
while(data[i]!='\n'&& data[i]!='\0'){
if(data[i]=='\t' || data[i]=='\t' || data[i]==' ') data[i]='\0';
i++;
}
printf("\nafter the function the data are:");
fputs(data,stdout);
}
第3题
🍌设计并测试一个函数,从一行输入中把一个单词读入一个数组中,并
丢弃输入行中的其余字符。该函数应该跳过第1个非空白字符前面的所有空
白。将一个单词定义为没有空白、制表符或换行符的字符序列。
/*
* @Description: 设计并测试一个函数,从一行输入中把一个单词读入一个数组中,并
丢弃输入行中的其余字符。该函数应该跳过第1个非空白字符前面的所有空
白。将一个单词定义为没有空白、制表符或换行符的字符序列。
* @Author: ~光~~
* @Date: 2023-12-21 17:15:53
* @LastEditTime: 2023-12-28 20:56:27
* @LastEditors:
*/
#include<stdio.h>
#include<ctype.h>
void readWord(char *word, int maxLength);
int main() {
char word[100]; // 假设最大单词长度为100
printf("请输入一行文本: ");
readWord(word, sizeof(word));
printf("读取的单词是: %s\n", word);
return 0;
}
void readWord(char *word, int maxLength) {
int c;
int i = 0;
// 跳过第1个非空白字符前的空白字符
while ((c = getchar()) != EOF && isspace(c)) {
continue;
}
// 读取单词直到遇到空白字符或达到数组最大长度
while (c != EOF && !isspace(c) && i < maxLength - 1) {
word[i] = c;
i++;
c = getchar();
}
// 添加字符串结束符
word[i] = '\0';
fflush(stdin);
}
第4题
🍑4. 设计并测试一个函数,它类似编程练习3的描述,只不过它接受第2个
参数指明可读取的最大字符数。
/*
* @Description: .设计并测试一个函数,它类似编程练习3的描述,只不过它接受第2个
参数指明可读取的最大字符数。
* @Author: ~光~~
* @Date: 2023-12-28 20:55:59
* @LastEditTime: 2023-12-28 20:56:07
* @LastEditors:
*/
#include<stdio.h>
#include<ctype.h>
void readWord(char *word, int maxLength);
int main() {
char word[100]; // 假设最大单词长度为100
printf("请输入一行文本: ");
readWord(word, sizeof(word));
printf("读取的单词是: %s\n", word);
return 0;
}
void readWord(char *word, int maxLength) {
int c;
int i = 0;
// 跳过第1个非空白字符前的空白字符
while ((c = getchar()) != EOF && isspace(c)) {
continue;
}
// 读取单词直到遇到空白字符或达到数组最大长度
while (c != EOF && !isspace(c) && i < maxLength - 1) {
word[i] = c;
i++;
c = getchar();
}
// 添加字符串结束符
word[i] = '\0';
fflush(stdin);
}
第5题
🌿设计并测试一个函数,搜索第1个函数形参指定的字符串,在其中查找第2个函数形参指定的字符首次出现的位置。
如果成功,该函数返指向该字符的指针,如果在字符串中未找到指定字符,则返回空指针(该函数的功
能与 strchr()函数相同)
/*
* @Description: .设计并测试一个函数,搜索第1个函数形参指定的字符串,在其中查
找第2个函数形参指定的字符首次出现的位置。
如果成功,该函数返指向该字符的指针,如果在字符串中未找到指定字符,则返回空指针(该函数的功
能与 strchr()函数相同)。
在一个完整的程序中测试该函数,使用一个循环给函数提供输入值。
* @Author: ~光~~
* @Date: 2023-12-28 20:57:42
* @LastEditTime: 2023-12-29 11:25:47
* @LastEditors:
*/
#include<stdio.h>
#include<string.h>
char *find(char *s,char *f);
int main(void){
char *s="o";
char *f="nihaohhss";
char *x;
printf("outer\n");
x=find(s,f);
if (x != NULL) {
printf("the character is :");
printf("%c", *x);
} else {
printf("Character not found\n");
}
return 0;
}
char *find(char *s, char *f){
int i=0;
for(i=0;f[i]!='\0';i++){
if(f[i]==s[0]) return &f[i];//此时直接返回相应的地址就可以了
}
return NULL;
}
第6题
🌺6.编写一个名为is_within()的函数,
1??接受一个字符和一个指向字符串的指针作为两个函数形参。
2?? 如果指定字符在字符串中,该函数返回一个非零值(即为真)。否则,返回0(即为假)。
在一个完整的程序中测试该函数,使用一个循环给函数提供输入值。
/*
* @Description: 编写一个名为is_within()的函数,
接受一个字符和一个指向字符串的指针作为两个函数形参。
如果指定字符在字符串中,该函数返回一个非零值
(即为真)。否则,返回0(即为假)。
在一个完整的程序中测试该函数,使用一个循环给函数提供输入值。
* @Author: ~光~~
* @Date: 2023-12-28 21:55:44
* @LastEditTime: 2023-12-29 11:29:51
* @LastEditors:
*/
#include<stdio.h>
#include<string.h>
int is_within(char c,char *p);
int main(void){
char c='A';
char *p="nihaoA";
int t;
t=is_within(c,p);
if(t) printf("Specify characters are in the string\n");
else printf("Specify characters are not in the string\n");
return 0;
}
int is_within(char c,char *p){
// 如果指定字符在字符串中,该函数返回一个非零值
// (即为真)。否则,返回0(即为假)。
int i=0;
while(*p!='\0'){
if(c==*p) return 1;
p++;
}
return 0;
}
第7题
🚀strncpy(s1, s2, n)函数把s2中的n个字符拷贝至s1中,截断s2,或者有必要的话在末尾添加空字符。如果s2的长度是n或多于n,目标字符串不能以空字符结尾。该函数返回s1。自己编写一个这样的函数,名为mystrncpy()。在一个完整的程序中测试该函数,使用一个循环给函数提供输入值。
/*
* @Description: strncpy(s1, s2, n)函数把s2中的n个字符拷贝至s1中,截断s2,或者有必
要的话在末尾添加空字符。如果s2的长度是n或多于n,目标字符串不能以空
字符结尾。该函数返回s1。自己编写一个这样的函数,名为mystrncpy()。在
一个完整的程序中测试该函数,使用一个循环给函数提供输入值。
* @Author: ~光~~
* @Date: 2023-12-29 11:33:14
* @LastEditTime: 2023-12-29 12:02:46
* @LastEditors:
strncpy() 函数在复制时,会尽可能复制源字符串的前 n 个字符到目标字符串中。具体处理方式如下:
如果源字符串的长度大于等于 n,则 strncpy() 只会复制源字符串的前 n 个字符到目标字符串中。
目标字符串的剩余部分(如果有的话)不会被改变。如果源字符串的长度小于 n,则 strncpy()
会先复制源字符串的所有字符,然后用空字符 ('\0') 填充目标字符串的剩余部分,直到达到 n 个字符为止。
如果 dest 原来已经有内容,那么会根据上述规则进行覆盖或追加。如果 dest 原来的内容长度大于等于 n,
则只会覆盖 dest 的前 n 个字符;如果 dest 原来的内容长度小于 n,则会覆盖整个原内容,并在剩余的位置
用空字符 ('\0') 填充。
*/
#include<stdio.h>
#include<string.h>
char *mystrncpy(char *s1,char *s2,int n);
int main(void){
char s1[10]="nihaoya";
char s2[10]="hello";
int n=3;
char *consolidation;
consolidation=strncpy(s1,s2,n);
printf("%s\n",consolidation);
return 0;
}
char *mystrncpy(char *s1,char *s2,int n){
int len=0;
len=strlen(s2);
if(len>=n) {
strncpy(s1, s2, n);
s1[n]='\0';
}
else strncpy(s1, s2, n);
return s1;
}
第8题
🐬 8.编写一个名为string_in()的函数,接受两个指向字符串的指针作为参数。如果第2个字符串中包含第1个字符串,该函数将返回第1个字符串开始的地址。例如,string_in(“hats”, “at”)将返回hats中a的地址。否则,该函数返回空指针。在一个完整的程序中测试该函数,使用一个循环给函数提供输入值。
/*
* @Description: 编写一个名为string_in()的函数,接受两个指向字符串的指针作为参
数。如果第2个字符串中包含第1个字符串,该函数将返回第1个字符串开始的地址。
例如,string_in("hats", "at")将返回hats中a的地址。否则,该函数返
回空指针。在一个完整的程序中测试该函数,使用一个循环给函数提供输入值。
* @Author: ~光~~
* @Date: 2023-12-29 12:05:39
* @LastEditTime: 2023-12-29 16:12:03
* @LastEditors:
strcmp()函数比较字符串中的字符,直到发现不同的字符为止,这一过
程可能会持续到字符串的末尾。而strncmp()函数在比较两个字符串时,可以
比较到字符不同的地方,也可以只比较第3个参数指定的字符数。
*/
#include<stdio.h>
#include<string.h>
char *string_in(char *s1,char *s2);
int main(void){
char *p;
char *s1="nihaoss";
char *s2="os";
p=string_in(s1,s2);
if(p!=NULL){
printf("s2 is in s1\n");
printf("the letter address is %p\n",p);
}else printf("s2 is not in s1\n");
return 0;
}
char *string_in(char *s1,char *s2){
int t,i=0;
for(i=0;i<strlen(s1);i++){
if(strncmp(s1+i,s2,strlen(s2))==0) return s1+i;
}
return NULL;
}
第9题
🐋9.编写一个函数,把字符串中的内容用其反序字符串代替。在一个完整
的程序中测试该函数,使用一个循环给函数提供输入值。
/*
* @Description: 编写一个函数,把字符串中的内容用其反序字符串代替。在一个完整
的程序中测试该函数,使用一个循环给函数提供输入值。
* @Author: ~光~~
* @Date: 2023-12-29 15:26:06
* @LastEditTime: 2023-12-29 16:33:29
* @LastEditors:
*/
#include<stdio.h>
#include<string.h>
char *reverse(char *s,char *real);
int main(void){
char *s="nihao";
char *real;
printf("before s is %s\n",s);
real=reverse(s,real);
printf("after s is %s\n",real);
return 0;
}
char *reverse(char *s,char *real){
int i;
for(i=0;i<strlen(s);i++){
real[i]=s[strlen(s)-i-1];
}
real[i]='\0';
return real;
}
第10题
🌞10.编写一个函数接受一个字符串作为参数,并删除字符串中的空格。在一个程序中测试该函数,使用循环读取输入行,直到用户输入一行空行。该程序应该应用该函数只每个输入的字符串,并显示处理后的字符串。
#include<stdio.h>
void removeSpaces(char *str);
int main() {
char inputLine[100]; // 假设输入行的最大长度为 100
// 循环读取输入行,直到用户输入一行空行
printf("请输入字符串(输入空行结束):\n");
while (fgets(inputLine, sizeof(inputLine), stdin) != NULL && inputLine[0] != '\n') {
// 调用函数删除字符串中的空格
removeSpaces(inputLine);
// 显示处理后的字符串
printf("处理后的字符串: %s\n", inputLine);
}
printf("程序结束。\n");
return 0;
}
// 函数:删除字符串中的空格
void removeSpaces(char *str) {
int i, j = 0;
for (i = 0; str[i] != '\0'; i++) {
if (str[i] != ' ') {
str[j++] = str[i];
}
}
str[j] = '\0'; // 在新字符串的末尾添加 null 字符
}
第11题
🌈11.编写一个函数,读入 10个字符串 或者读到EOF时停止。该程序为用户提供一个有5个选项的菜单:打印源字符串列表、以ASCII中的顺序打印字符串、按长度递增顺序打印字符串、按字符串中第1个单词的长度打印字符串、退出。菜单可以循环显示,除非用户选择退出选项。当然,该程序要能
真正完成菜单中各选项的功能
/*
* @Description: 编写一个函数,读入 10个字符串 或者读到EOF时停止。该程序为用
户提供一个有5个选项的菜单:打印源字符串列表、以ASCII中的顺序打印字
符串、按长度递增顺序打印字符串、按字符串中第1个单词的长度打印字符
串、退出。菜单可以循环显示,除非用户选择退出选项。当然,该程序要能
真正完成菜单中各选项的功能
* @Author: ~光~~
* @Date: 2023-12-29 18:54:50
* @LastEditTime: 2023-12-31 11:43:19
* @LastEditors:
*/
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define SIZE 4
#define ROOM 10
void show(void);
void enter(char s[SIZE][ROOM]);
void print1(char s[SIZE][ROOM]);
void print2(char s[SIZE][ROOM]);
void print3(char s[SIZE][ROOM]);
void print4(char s[SIZE][ROOM]);
int check_words(char s[]);//计算字符串的第一个单词的长度
int main(void){
int i=0,flag=1;
int choice;
char s[SIZE][ROOM];
//从键盘输入
printf("Input up to %d lines\n", SIZE);
enter(s);
while(flag){
show();
printf("please enter your choice:");
while(scanf("%d",&choice)!=1){
printf("incorrect type ! please try again!");
show();
printf("please enter your choice:");
fflush(stdin);
}
switch(choice){
case 1:{
printf("the function 1\n");
print1(s);
break;
}
case 2:{
printf("the function 2\n");
printf("the original characters:\n");
print1(s);
print2(s);
break;
}
case 3:{
printf("the function 2\n");
printf("the original characters:\n");
print1(s);
print3(s);
break;
}
case 4:{
printf("the function 2\n");
printf("the original characters:\n");
print1(s);
print4(s);
break;
}
default:{
printf("bye!\n");
flag=0;
break;
}
}
}
return 0;
}
void show(void){
printf("-----------------------------------------------------\n");
printf("(1)打印源字符串列表\t\t(2)以ASCII中的顺序打印字符串\n");
printf("(3)按长度递增顺序打印字符串\t(4)按字符串中第1个单词的长度打印\n");
printf("(5)退出\n");
printf("-----------------------------------------------------\n");
}
void enter(char s[][ROOM]){
char c;
int i,j=0;
for(i=0;i<SIZE;i++){
printf("plese enter the %dth character:",i+1);
fflush(stdin);
while((c=getchar())!=EOF && (c!='\n')){
s[i][j]=c;
j++;
if(j==ROOM-2){
printf("====the room is full====\n");
printf("====I will break=====\n");
break;
}
}
s[i][j]='\0';
j=0;
}
}
void print1(char s[SIZE][ROOM]){
int i=0;
for(i=0;i<SIZE;i++){
printf("the %dth are %s\n",i+1,s[i]);
}
}
void print2(char s[SIZE][ROOM]){
// 以ASCII中的顺序打印字符串
//采用选择排序法
int k,i,j,p;
int max_index;
char max=s[0][0];
char tmp;
for(i=0;i<SIZE;i++){//一共SIZE个数组
for(k=0;s[i][k]!='\0';k++){//轮次
max=s[i][k];
max_index=k;//如果第一个就是最大的话 一定记得要给上一轮循环的max再次覆盖 从头开始
for(j=k+1;s[i][j]!='\0';j++){//遍历次数
if(s[i][j]-max>=0){
max=s[i][j];//记下最大值的位置
max_index=j;
}
}
tmp=s[i][max_index];
s[i][max_index]=s[i][k];
s[i][k]=tmp;
}
}
printf("按ascii顺序打印字符串:\n");
for(i=0;i<SIZE;i++){
printf("%s\n",s[i]);
}
}
void print3(char s[SIZE][ROOM]){
// 按长度递增顺序打印字符串
int i,j=0,k;
int len[SIZE];
int min,min_index;
int index[SIZE];
int tmp;
int list[SIZE][2];//建立一个类似于python 中的列表的东西 第一个装的是顺序,第二个装的是对应的长度
for(i=0;i<SIZE;i++){
len[i]=strlen(s[i]);
}
for(i=0;i<SIZE;i++){
list[i][0]=i;
list[i][1]=len[i];
}//list[i][0] 第i个 0 里面装的是顺序 1里面装的是长度
for(i=0;i<SIZE;i++){
min_index=list[i][0];
min=list[i][1];
for(j=i+1;j<SIZE;j++){
if(min>=list[j][1]){
min_index=list[i][0];
min=list[j][1];
}
}
for(k=0;k<2;k++){
tmp=list[i][k];
list[i][k]=list[min_index][k];
list[min_index][k]=tmp;
}
}
// 打印list
printf("按顺序的打印字符串:\n");
for(i=0;i<SIZE;i++){
printf("%s\n",s[list[i][0]]);
}
}
int check_words(char s[]){
//计算开始的单词的长度
int i,j;
int flag=0;
int test=0;
for(i=0;i<ROOM;i++){
if(isalpha(s[i])){
flag+=1;
}
else{
if(flag>=1&&test==0) {
return flag;
}
if(isalnum(s[i])) test=1; //如果数字和字母混在一起 也不算是一个单词
else test=0;
flag=0;
}
}
return 0;
}
void print4(char s[SIZE][ROOM]){
//按字符串中第1个单词的长度打印字符串
int i,j=0,k=0,z=0;
int len[SIZE];
int min,min_index;
int list[SIZE][2];//建立一个类似于python 中的列表的东西 第一个装的是顺序,第二个装的是对应的长度
int tmp;
for(i=0;i<SIZE;i++){
len[i]=check_words(s[i]); //得到每一个SIZE的第一个 单词的长度
// printf("len[%d] is %d\n",i,len[i]);
}
for(i=0;i<SIZE;i++){
list[i][0]=i;
list[i][1]=len[i];
}//list[i][0] 第i个 0 里面装的是顺序 1里面装的是长度
//开始对list进行排序 list【【0,3】,【1,2】】
for(i=0;i<SIZE;i++){
// printf("enter loop\n");
min_index=list[i][0];
min=list[i][1];
// for(j=i+1;j<SIZE;j++){ 注意 会越界 如果加一的话 导致排序不正常
for(j=i;j<SIZE;j++){
if(min>=list[j][1]){
min_index=j;
min=list[min_index][1];
}
}
for(k=0;k<2;k++){
tmp=list[i][k];
list[i][k]=list[min_index][k];
list[min_index][k]=tmp;
}
}
// 打印list
printf("按第一个单词的长度打印字符串:\n");
for(i=0;i<SIZE;i++){
printf("%s\n",s[list[i][0]]);
}
}
第12题
🍋12. 编写一个程序,读取输入,直至读到 EOF,报告读入的单词数、大写字母数、小写字母数、标点符号数和数字字符数。使用ctype.h头文件中的函数。
/*
* @Description: 编写一个程序,读取输入,直至读到 EOF,报告读入的单词数、大
写字母数、小写字母数、标点符号数和数字字符数。使用ctype.h头文件中的
函数。
* @Author: ~光~~
* @Date: 2023-12-29 19:36:42
* @LastEditTime: 2023-12-29 20:09:23
* @LastEditors:
*/
#include<stdio.h>
#include<ctype.h>
int main(void){
char c;
int flag=0,test=0,num=0;
int words=0,capital_letter=0,lowercase_letter=0,punctuation_mark=0,numeric_character=0;
printf("please enter:\n");
while((c=getchar())!=EOF){
if(isalpha(c)){
if(num){//如果这个字母的前面一个输入的是数字的话
flag=0;
num=0;
}
else{
flag+=1;
test=0;
}
if(islower(c)) lowercase_letter+=1;
else capital_letter+=1;
}else if(isspace(c)){
test=1;
punctuation_mark+=1;
}
else if(isdigit(c)) {
numeric_character+=1;
num=1;
if(flag>0) flag=0;//如果这个数字前面一个输入的是字母的话
}
else continue;
if(flag>1 && test){
words+=1;
flag=0;
test=0;
}
}
printf("**************************\n");
printf("the words are %d\n",words);
printf("the lowercase_letter are %d\n",lowercase_letter);
printf("the capital_letter are %d\n",capital_letter);
printf("the punctuation_mark are %d\n",punctuation_mark);
printf("the numeric_character are %d\n",numeric_character);
printf("**************************\n");
return 0;
}
第13题
🚁编写一个程序,反序显示命令行参数的单词。例如,命令行参数是see you later,该程序应打印later you see
/*
* @Description: 编写一个程序,反序显示命令行参数的单词。例如,命令行参数是
see you later,该程序应打印later you see。
* @Author: ~光~~
* @Date: 2023-12-29 20:14:24
* @LastEditTime: 2023-12-31 12:58:21
* @LastEditors:
*/
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define SIZE 20
#define ROOM 10
int check_words(char s[]); //检查得到的值是不是一个单词
int main(int argc, char *argv [])
{
int i,j=0;
char *s[SIZE];
char word[ROOM];
for(i=0;i<argc;i++){
if(check_words(argv[i])) {
*(s+j)=argv[i];
j+=1;
}
}
printf("the orignal character are:");
for(i=0;i<argc;i++){
printf("%s ",argv[i]);
}
printf("\nthe word character are:");
for(i=0;i<j;i++){
printf("%s ",s[i]);
}
printf("\nthe reverse character are:");
for(i=j-1;i>=0;i--){
printf("%s ",s[i]);
}
return 0;
}
int check_words(char s[]){
int i=0;
for(i=0;s[i]!='\0';i++){
if(!isalpha(s[i])) return 0;
}
return 1;
}
第14题
??14.编写一个通过命令行运行的程序计算幂。第1个命令行参数是double
类型的数,作为幂的底数,第2个参数是整数,作为幂的指数。
/*
* @Description: 编写一个通过命令行运行的程序计算幂。第1个命令行参数是double
类型的数,作为幂的底数,第2个参数是整数,作为幂的指数。
* @Author: ~光~~
* @Date: 2023-12-31 12:59:14
* @LastEditTime: 2023-12-31 15:21:39
* @LastEditors:
*/
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main(int argc, char *argv []){
if (argc != 3) {
printf("Usage: %s <base> <exponent>\n", argv[0]);
return 1;
}
double base = atof(argv[1]);
int exponent = atoi(argv[2]);
double result = pow(base, exponent);
printf("%.2lf ^ %d = %.2lf\n", base, exponent, result);
return 0;
}
第15题
🐋15.使用字符分类函数实现atoi()函数。如果输入的字符串不是纯数字,
该函数返回0。
/*
* @Description: 15.使用字符分类函数实现atoi()函数。如果输入的字符串不是纯数字,
该函数返回0。
* @Author: ~光~~
* @Date: 2023-12-31 15:24:55
* @LastEditTime: 2023-12-31 16:18:27
* @LastEditors:
*/
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int atoi_pick(char s[]);//如果是数字就返回数字 不是就返回0 和atoi一样针对整数
int main(int argc, char *argv []){
int i,t;
char s[]="1a23";
printf("the result are:");
for(i=1;i<argc;i++){
t=atoi_pick(argv[i]);
printf("%d ",t);
}
return 0;
}
int atoi_pick(char s[]){
int i,result=0,poww=1;
int sign=1,flag=0;
int num;
//处理符号位
if(s[0]=='+') sign=1;
if(s[0]=='-') sign=-1;
// printf("sign is %d\n",sign);
//判断是不是数字
for(i=1;s[i]!='\0';i++){
if(!(isdigit(s[i]))) return 0;
}
//开始对数字处理
if(s[0]=='+'||s[0]=='-'){
for(i=strlen(s)-1;i>0;i++){
num=s[i]-'0';
result+=num*poww;
poww*=10;
}
if(sign==1) return result;
else return (-1)*result;
}
if(isalnum(s[0])){
for(i=strlen(s)-1;i>=0;i--){
num=s[i]-'0';
result+=num*poww;
poww*=10;
}
return result;
}
}
第16题
🐋16.16.编写一个程序读取输入,直至读到文件结尾,然后把字符串打印出
来。该程序识别和实现下面的命令行参数:
-p 按原样打印
-u 把输入全部转换成大写
-l 把输入全部转换成小写
如果没有命令行参数,则让程序像是使用了-p参数那样运行。
/*
* @Description: 16.编写一个程序读取输入,直至读到文件结尾,然后把字符串打印出
来。该程序识别和实现下面的命令行参数:
-p 按原样打印
-u 把输入全部转换成大写
-l 把输入全部转换成小写
如果没有命令行参数,则让程序像是使用了-p参数那样运行。
* @Author: ~光~~
* @Date: 2023-12-31 16:19:36
* @LastEditTime: 2023-12-31 16:31:03
* @LastEditors:
*/
#include<stdio.h>
#include<ctype.h>
#define SIZE 100
void function(char s[]);
int main(void){
char c;
int i=0;
char s[SIZE];
printf("please enter:\n");
while((c=getchar())!=EOF){
s[i]=c;
i++;
}
s[i]='\0';
printf("-p 按原样打印\n");
printf("-u 把输入全部转换成大写\n");
printf("-l 把输入全部转换成小写\n");
printf("then you can enter :");
function(s);
return 0;
}
void function(char s[]){
char c;
int i;
if(getchar()=='-'){
c=getchar();
switch(c){
case 'p':{
for(i=0;s[i]!='\0';i++){
printf("%c",s[i]);
}
break;
}
case 'u':{
for(i=0;s[i]!='\0';i++){
if(isalpha(s[i])) s[i]=toupper(s[i]);
printf("%c",s[i]);
}
break;
}
case 'l':{
for(i=0;s[i]!='\0';i++){
if(isalpha(s[i])) s[i]=tolower(s[i]);
printf("%c",s[i]);
}
break;
}
default:{
printf("bye!\n");
break;
}
}
}else printf("bye!\n");
}
??完成啦~
??如果有其他解法~ 欢迎大家讨论 批评指正~
🌈 此编程练习参考答案为本人所写,如有错误欢迎大家批评指正~~ 如转载请说明来源~
🌈ok,完结~(●’?’●) 看到这里 点个赞叭 (●’?’●)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!