c现代方法 13章程序设计题 自己编写答案

本文详细分析了一段C语言程序的错误,并提供了多个修正方案,涉及字符串处理、数组指针、循环条件判断等多个方面。通过改正错误,程序能够正确找到输入字符串数组中最短和最长的单词。此外,还讨论了其他C语言程序,包括计算单词个数、字符串转换、检查是否为回文等,展示了C语言在字符串操作和算法实现上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1题,下面程序错在哪啦?(改正在后面) 

#include <stdio.h>
#include <string.h>
#define LEN 100
#define LENGTH 20
int main()
{
char word[LENGTH + 1];
char  words[LEN +1][LENGTH + 1];

char (*p)[LENGTH + 1];
p = words;
char *smallest;
char *biggest;
scanf("%s",word);

smallest = "";
biggest = "";

while(strlen(word) != 4)
  {
    strcpy(*p ++ ,word);

    if(strcmp(smallest,word) > 0)  
           smallest = p;             
    if(strcmp(biggest,word) < 0)
            biggest = p;        
    
    scanf("%s",word);
  }

printf("%s\n",biggest);
printf("%s\n",smallest);
    return 0;
}

~          

下面有2~3个改正,每个改正都可以运行

改正1:

#include <stdio.h>
#include <string.h>
#define LEN 100
#define LENGTH 20
int main()
{
char word[LENGTH + 1];
char  words[LEN +1][LENGTH + 1];

char (*p)[LENGTH + 1];
p = words;
//错误1,smallest和biggest是要指向数组words的元素(元素是维数是LENGTH + 1的数组)的
,也就是指向
//数组的指针,所以必须定义成数组的指针,下面两句是错误的
char (*smallest)[LENGTH +1];//应该改成  char (*smallest)[LENGTH + 1];
                            //当然也不能赋值为 ""
char (*biggest)[LENGTH + 1]; //应该改成  char(*biggest)[LENGTH + 1];
                            //当然也不能赋值为 ""
scanf("%s",word);

smallest = words;
biggest = words;

while(strlen(word) != 4)
  {
//smallest 和 biggest一会不能指向word(因为word得内容一直在变化,指向word等于指>向变化量)
//所以要一会或许把p值给smallest或者biggest,p值while循环最后面再自增
    strcpy(*p,word);//去掉了自增,后面再自增

    if(strcmp(*smallest,*p) > 0)  //word改正*p
           smallest = p;             //改成=p   
    if(strcmp(*biggest,word) < 0)
            biggest = p;        //改成=p 
    ++ p;
    scanf("%s",word);
  }

printf("%s\n",*biggest);
printf("%s\n",*smallest);
    return 0;
}

~          

上面程序错误说明:

#include <stdio.h>
#include <string.h>
// LEN is the number of elements in the  array words
#define LEN 100
#define LENGTH 20
int main()
{
char word[LENGTH + 1];
char  words[LEN +1][LENGTH + 1];


//p一会要指向数组words,所以需要数组指针,所以如下定义
char (*p)[LENGTH + 1];
p = words;
//存放words的元素的指针,因为words是字符串数组(就是数组的数组),所以small和bigge//st必须字符串指针的指针或者数组指针,即使char**也不行

char (*smallest)[LENGTH + 1] = words;
char (*biggest)[LENGTH + 1] = words;

scanf("%s",word);
while(strlen(word) != 4)
  {
//word是在不断改变的,所以word不能传给smallest和biggest,
//把words的某个地址传给smallest和biggest  
    strcpy(*p,word);
    if(strcmp(*smallest,*p) > 0)
           smallest = p;
    if(strcmp(*biggest,*p) < 0)
            biggest = p;
    ++ p;
     scanf("%s",word);
  }

printf("%s\n",*biggest);
printf("%s\n",*smallest);
    return 0;
}

改正2:

//方法1:smallest和biggest定义为char *
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

/*LEN是words的单词个数,LENGTH是words每个单词的预留长度*/
#define LEN 100
#define LENGTH 20

int init(char (*)[LENGTH + 1],int );
void find_big_small(char (*)[LENGTH + 1]);
void print(char (*p)[LENGTH + 1]);
int main()
{
char words[LEN + 1][LENGTH + 1];
init(words,LEN + 1);
print(words);
find_big_small(words);

  return 0;
}

/*  initial the words  */
int init(char (*p)[LENGTH + 1],int n)
{
char word[LENGTH + 1];
scanf("%s",word);
int cnt = 0;
while(strlen(word) != 4 && (cnt < n))
  {
    strcpy(*p ++,word);    
    scanf("%s",word);
    ++ cnt;
  }
if(cnt == n)
  strcpy(*p,"");
else
  {
    strcpy(*p ++ ,word);
    strcpy(*p,"");
    ++ cnt;
  }
   return cnt;
}
/*  find smallest and biggest word   */
void find_big_small( char (*p)[LENGTH + 1])
{
  //small和big是拷贝,这两个赋值都得拷贝
  char small[LENGTH + 1];
  char   big[LENGTH  + 1];
  strcpy(small,*p);
  strcpy(big,*p);
  
  for(; strcmp(*p,"") != 0;++p)
    {
        if(strcmp(small,*p) > 0)
	     strcpy(small,*p);
	if(strcmp(big,*p) < 0)
		strcpy(big,*p);
    }
  printf("small:%s\n",small);
  printf("big  :%s\n",big);
}

/*   print the words   */
void print(char (*p)[LENGTH + 1])
{
while(strcmp(*p,"") != 0)
  {
    printf("%s\n",*p ++);
  }
}

自己评注:什么都好,就是在find_big_small中small和big都执行拷贝,下面这个程序不执行字符串拷贝,

下面是执行结果:

dog
zebra
rabbit
catfish
walrus
cat
fish
----------------------begin print -----------------------
dog
zebra
rabbit
catfish
walrus
cat
fish
--------------------------end-----------------------------
small:cat
big  :zebra

把程序中查找中的small和big换成指针后,程序如下:


//方法1:smallest和biggest定义为char *
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#define LEN 100
#define LENGTH 20

int init(char (*)[LENGTH + 1],int );
void find_big_small(char (*)[LENGTH + 1]);
void print(char (*p)[LENGTH + 1]);
int main()
{
char words[LEN + 1][LENGTH + 1];
init(words,LEN + 1);
print(words);
find_big_small(words);


  return 0;
}

int init(char (*p)[LENGTH + 1],int n)
{
char word[LENGTH + 1];
scanf("%s",word);
int cnt = 0;
while(strlen(word) != 4 && (cnt < n))
  {
    strcpy(*p ++,word);    
    scanf("%s",word);
    ++ cnt;
  }
if(cnt == n)
  strcpy(*p,"");
else
  {
    strcpy(*p ++ ,word);
    strcpy(*p,"");
    ++ cnt;
  }
   return cnt;
}

void find_big_small( char (*p)[LENGTH + 1])
{
  char (*small)[LENGTH + 1];
  char   (*big)[LENGTH  + 1];
  small = p;
  big = p;
  
  for(; strcmp(*p,"") != 0;++p)
    {
       //small big is pointer which pointed to array
        if(strcmp(*small,*p) > 0)
	     small = p;
	if(strcmp(*big,*p) < 0)
		big = p;
    }
  printf("small:%s\n",*small);
  printf("big  :%s\n",*big);
}

void print(char (*p)[LENGTH + 1])
{
while(strcmp(*p,"") != 0)
  {
    printf("%s\n",*p ++);
  }
}

4.

#include <stdio.h>

int main(int argc,char **argv)
{
int i;
for(i = 3;i > 0;--i)
	printf("%s  ",argv[i]);
printf("\n");
    return 0;
}

运行:

r@r:~/coml/c/13/program/4$ ./reverse void and null
null  and  void  

5.

#include <stdio.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
int i,sum = 0;
for(i = argc - 1;i > 0; --i)
    sum += atoi(argv[i]);
printf("sum = %d\n",sum);
 
    return 0;
}

注:以上程序使用了atoi函数,原型是   int atoi(const char *str)。定义在stdlib头文件中,作用是把字符串转换成整数。

6.

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define LEN 20
#define NUM_PLA 100
void trans(char *);
int main(int argc,char **argv)
{
char *planets[] = {"Mercury","Venus","Earth","Mars","Jupiter","Saturn","Uranus"
,"Neptune","Pluto"};
char temp[LEN + 1];
int i,j;
for(i = 1; i != argc; ++ i)
  {
      strcpy(temp,argv[i]);
      trans(temp);
    for(j = 0; j != sizeof(planets)/sizeof(planets[0]);++ j)
      {
        if( strcmp(planets[j],temp) == 0)
                break;

      }
      if(j == 9)
              printf("%s is not a planet\n",argv[i]);
      else
              printf("%s is planet %d\n",argv[i],j + 1);
   }

   return 0;
}
void trans(char *p)
{
*p ++ = toupper(*p);
int i = 0;
while(*p != '\0')
     {*p = tolower(*p);
     ++ p;
     }
}
    

注:tolower,toupper都定义在ctype头文件中

8.

#include <stdio.h>
#include <string.h>
#define LEN 20

char *decade[] = {"twenty","thirty","forty","fifty","sixty","seventy",
	"eighty","ninty"};
char *unit[] = {"one","two","three","four","five","six","seven","eight","nine"};
void print_str(int n);
int main()
{
int n;
int decade_num,unit_num;

printf("Enter a two-digit number:");
scanf("%2d",&n);
decade_num = n / 10;
unit_num = n % 10;
if(decade_num == 1)
   print_str(n);
else 
   {
   printf("%s ",decade[decade_num -2]);
   if(unit_num == 0)
	   printf("\n");
   else 
	   printf("%s\n",unit[unit_num - 1]);
   
   }

    return 0;
}

void print_str(int n)
{
char str_num[LEN + 1];
switch(n)
  {
 case 10:strcpy(str_num,"ten");break;
 case 11:strcpy(str_num,"eleven");break; 
 case 12:strcpy(str_num,"twelve");break; 
 case 13:strcpy(str_num,"thirteen");break; 
 case 14:strcpy(str_num,"fourteen");break; 
 case 15:strcpy(str_num,"fifteen");break; 
 case 16:strcpy(str_num,"sixteen");break; 
 case 17:strcpy(str_num,"seventeen");break; 
 case 18:strcpy(str_num,"eighteen");break; 
 case 19:strcpy(str_num,"nineteen");break; 
 default:printf("wrong number.\n");
 }
printf("%s",str_num);
}

运行结果:

r@r:~/coml/c/13/program/7$ gcc 1.c -o 123
r@r:~/coml/c/13/program/7$ ./123
Enter a two-digit number:23
twenty three
r@r:~/coml/c/13/program/7$ ./123
Enter a two-digit number:12  
twelver@r:~/coml/c/13/program/7$ ./123
Enter a two-digit number:89
eighty nine
r@r:~/coml/c/13/program/7$ ./123
Enter a two-digit number:50
fifty 

8.

#include <stdio.h>
#include <ctype.h>
int compute_scrabble_value(const char *);
#define LEN 100
int main()
{
char num_str[LEN + 1],value;
scanf("%s",num_str);
value = compute_scrabble_value(num_str);
printf("%d",value);
return 0;
}


int compute_scrabble_value(const char *s)
{
int sum = 0,value;
char ch;
for(;*s != '\0';++ s)
 {
    ch = tolower(*s);
    if(ch == 'a' ||ch == 'e' ||ch == 'i' ||ch == 'l' ||ch == 'n' ||ch == 'o' || ch == 'r' ||ch == 's' ||ch == 't' ||ch == 'u')
        value = 1;
    else if( ch == 'd' || ch == 'g')
	  value  = 2;
    else if( ch == 'b' || ch == 'm' || ch == 'p'|| ch == 'c' )
	  value = 3;
    else if(ch == 'f' || ch == 'h' || ch ==  'v' || ch == 'w' || ch == 'y')
	  value = 4;
    else if(ch == 'k')
	  value = 5;
    else if(ch == 'j'||  ch == 'x')
	  value = 8; 
    else if (ch == 'q' || ch == 'z')
	   value = 10;  
    else  
    { value = 0;
      printf("%c is  is not english word.\n",*s);
      printf("value is : %d\n",value);
    }
    
  sum += value;
 }
  return sum;
}
pitfall
12

9.

#include <stdio.h>
#include <ctype.h>
#define LEN  100
int compute_vowel_count(const char*);
int main()
{
int sum;
char arr[LEN + 1];
scanf("%s",arr);
sum = compute_vowel_count(arr);
printf("total have %d vowels.\n",sum);



return 0;
}

int compute_vowel_count(const char *s)
{
char ch;
int sum = 0,cnt;
for(;*s != '\0';++ s)
  {
         ch = tolower(*s);
         if(ch == 'a' || ch == 'e' || ch =='i' || ch == 'o' || ch == 'u')
                 cnt = 1;
          else 
                  cnt = 0;
          sum += cnt;
  }


return sum;

}      

10.

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define LEN 50
void reverse_name(const char*);
int readline(char *,int );
int main()
{
char name[LEN + 1];
readline(name,LEN+1);
reverse_name(name);
return 0;
}
void reverse_name(const char *name)
{
char surname[LEN + 1];
char name_head;
const char *p;
char *ptr;
int i;
for(p = name; *p != '\0';++p)
   {
      if(*p >= 'A' && *p <= 'Z' || *p >='a' && *p<='z')
      { name_head = toupper(*p);
        break;
      }    
   }

for(i = strlen(name);i > 0;-- i)
  {
     if(p[i] >= 'A' && p[i] <= 'Z')
        {
         break;
	}
  }
strcpy(surname,name + i);
for(ptr = surname;*ptr != '\0';++ ptr)
  {
  if(*ptr == ' ')
	  *ptr = '\0';
  }
printf("%s, %c\n",surname,name_head);

}

int readline(char *p,int n)
{
char ch;
int i = 0;
while((ch = getchar()) != '\n' && i < n)
  {
     *p++ = ch;
     ++ i;
  }
*p = '\0';
return i;
}

运行结果:

Lloyd Fosdick
Fosdick, L

 12.

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define LEN 20
#define NUM 30
#define MAX_LENGTH 600
int init_(char (*p)[LEN + 1],int n,char *);
int readline(char *,int );
void reverse();
int main()
{
	
char terminate;
char arr[NUM + 1][LEN + 1];
int cnt =init_(arr,NUM +1,&terminate);
printf("There is total %d words:\n",cnt);
int i;
for(i = 0;i != cnt; ++i)
  {
  printf("%s  ",arr[i]); 
  }
printf("\n");
reverse(arr,cnt);
printf("%c",terminate);
 return 0;
}

//return how many words 
int init_(char (*p)[LEN +1],int n,char *terminate)
{
char words[MAX_LENGTH + 1];
char *ptr;
char word[LEN + 1];
int i = 0;
int cnt = 0;
readline(words,MAX_LENGTH + 1);
*terminate = words[strlen(words) - 1];
words[strlen(words) - 1] = '\0';

for(ptr = words;*ptr != '\0';)
  {
     if(*ptr != ' ')
          {
	    word[i ++] = *ptr ++;
	    
	  }
     if(*ptr == ' ')
         {
	   word[i ++] = '\0';
           strcpy(*p ++,word);
	   i = 0;
	   ++ cnt;
           while(*ptr == ' ')
	      ++ ptr;	   
	 }
     if(*(ptr + 1) == '\0')
         {
	   word[i ++] = *ptr ++;
	   word[i] = '\0';
	   strcpy(*p ++,word);
           ++ cnt; 	  
	 } 
  }
return cnt;

}

//change the words
void reverse(char (*p)[LEN +1],int n)
{
int i;
for(i = n -1;i >= 0; --i)
  {
      if(i != 0)
	  printf("%s  ",p[i]);
      else
	  printf("%s",p[i]);
  }
}
int readline(char *p,int n)
{
char ch;
int i = 0;
while((ch = getchar()) != '\n')
  {
   //读入的时候跳过开始的空白字符
    if(isspace(ch) && i ==0)
       continue;
    if(i < n)

      { *p ++= ch;
         ++ i;
      }	    
  }
*p = '\0';
return i;
}

运行结果是: 

i am a good and you are a good too?
There is total 10 words:
i  am  a  good  and  you  are  a  good  too  
too  good  a  are  you  and  good  a  am  i?

13 

#include <stdio.h>
#include <ctype.h>
#include <string.h>
void encrypt(char *message,int shift)
{int i;
	
	for(i = 0;i != strlen(message);++ i)
	{

	   if(message[i] >= 'A' && message[i] <= 'Z')
	   {
	     message[i] += shift;
	     if(message[i] > 'Z')
		     message[i] -= 'Z'-'A'+1;  
	   }

	   else if(message[i] >= 'a' && message[i] <= 'z') 
	   {
	     message[i] += shift;
	     if(message[i] > 'z')
		     message[i] -= 'z' - 'a' + 1;  
	   }

	   else ;
	}
}
//本题需要输入时候跳过空格,所以必须自己定义一个字符串输入函数
int read_line(char *s,int n)
{
int cnt = 0;
char ch;
while((ch = getchar()) != '\n'){
   if(cnt == n - 2)
      {
      printf("stack over flow.");
      break;
      }
    {
    *s ++ = ch; 
    cnt ++; 
    }
    *s = '\0';
}



}
int main()
	{
	char test[100];
	printf("enter a message:");
       read_line(test,100);
	printf("enter shift:");
	int n;
	scanf("%d",&n);
	encrypt(test,n);	
	printf("%s",test);
	return 0;
	}

运行:

enter a message:Go ahead,make my day.
enter shift:3
Jr dkhdg,pdnh pb gdb.

14题. 

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
typedef int bool;
#define  true 1
#define  false 0
int alpha_nums[26] = {0};
bool are_anagrams(const char *word1,const char  * word2)
{
	int i = 0;
	int j = 0;
	char ch1,ch2;
	while(word1[i] != '\0')
		{
		if(isalpha(word1[i]))
			{
			ch1 = tolower(word1[i]);
			alpha_nums[ch1 - 'a'] ++;
			}
		++ i;
		
		}
	
	
	while(word2[j] != '\0')
		{
			if(isalpha(word2[j]))
			{
			ch2 = tolower(word2[j]);
			alpha_nums[ch2 - 'a']--;
			}
		++ j;	
		}
int *p = alpha_nums;
bool sign = true;
while(p  != alpha_nums + 26)
	{
		if(*p ++ != 0)
		{
		sign = false;	
		break;
		}
	}
return sign;
}

int main()
{
char word1[100];
char word2[100];
	printf("Enter first word:");
	scanf("%s",word1);
	printf("Enter second word:");
	scanf("%s",word2);
	bool result = are_anagrams(word1,word2);
	if(result == true)
		printf("The two words are anagrams.");
	else
		printf("The two words are not anagrams");
return 0;
}

在ubuntu20.04上运行结果是: 

r@r:~/coml/c/13/program/14$ ./123
Enter first word:smartest
Enter second word:mattress
The two words are anagrams.r@r:~/coml/c/13/program/14$ ./123
Enter first word:dumbest
Enter second word:stumble
The two words are not anagrams

15题

#include <stdio.h>
#define STACK_SIZE 100
typedef int bool;
#define true  1
#define false 0
char contents[STACK_SIZE];
int  top = 0;

bool is_number(char );
bool is_operator(char );
double evaluate_RPN_expression(const char *);
double calculate(double ,double ,char );

char pop()
{
	return contents[-- top];
}

void push(char ch)
{
	contents[top ++] = ch;
}

void print(char *p,int n)
	{
		char *ptr = p;
		while(ptr != p + n)
			{
			   printf("%c ",*ptr);
			   ++ ptr;
			}
	}
void print_num(int *p,int n)
{
int *ptr = p;
while(ptr != (p + n))
	{
	 printf("%d",*ptr);
	 ++ ptr;
	}

}

int main()
{
char ch;
double result;
while((ch = getchar()) != '\n')
	{
		if(is_operator(ch) || is_number(ch))
			push(ch);
		else if(ch == '=')
			push(ch);
		else
			break;
	}
result = evaluate_RPN_expression(contents);
printf("%lf",result);
	return 0;
}

double evaluate_RPN_expression(const char *expression)
{
double num_arr[STACK_SIZE];
int index = 0;
const char *ptr = expression;
double temp;

int cnt = 0;
while(*ptr != '=')
	{
		if(is_number(*ptr))
		{
			num_arr[index ++]  = *ptr - 48;
		}
		else if(is_operator(*ptr))
		{
			temp = calculate(num_arr[index-2],num_arr[index-1],*ptr);				-- index;
			num_arr[index - 1] = temp; 
		}
		else 
		{
			printf("error character:%c.\n\n",*ptr);
			return -1;	
		}		
	ptr ++;
	}
return num_arr[index - 1];
}

double calculate(double d1,double d2,char ope)
{
double result;
if(ope == '-')
	result = d1 - d2;
else if(ope == '+')
	result = d1 + d2;
else if(ope == '*')
	result = d1 * d2;
else if(ope == '/')
	result = d1 / d2;
else
	{
		printf("error ope.");
		result =  -1;
	}
return result;
}

bool is_operator(char ch)
{
if(ch == '+' || ch == '-' || ch == '*'|| ch == '/')
	return true;
else 
	return false;
}
bool is_number(char ch)
{
if(ch >= '0' && ch <= '9')
	return true;
else 
	return false;
}

16题 

#include <string.h>
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
void reverse(char *p);
int readline(char *);
int main()
{
char arr[MAX_SIZE];
readline(arr);
reverse(arr);
printf("\n");
printf("%s",arr);
	return 0;
}
void reverse(char *p)
{
char *ptr1 = p;
char *ptr2 = p + strlen(p) - 1;
char temp;
while(ptr1 <= ptr2)
	{
	temp = *ptr1;
	*ptr1 = *ptr2;
	*ptr2 = temp;
	++ ptr1;
	-- ptr2;	
	}
}

int readline(char *p)
{
char ch;
int cnt = 0;
	while((ch = getchar()) != '\n')
	{
		if(cnt <= MAX_SIZE - 2)
		{
		*p = ch;
		++ p;
		++ cnt;		
		}

		else
			break;	
	}
	*p = '\0';
	return cnt;
}

17.

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAX_SIZE 100
int readline(char *,int );
typedef int bool;
#define true  1
#define false 0
bool is_palindrome(const char *message){
const char *ptr1 = message;
//这里不能用sizeof(message) / sizeof(message[0] -1代替下面的一个)
// 用sizeof表达式相除算出的结果不对的,sizeof()是计算数组的,不是字符串的
const char *ptr2 = message + strlen(message) - 1;
while(ptr1 <= ptr2)
	{
    //可能得连续跳过非字母的字符
	while(!isalpha(*ptr1))
		++ ptr1;
    //可能连续跳过非字母的字符
	while(!isalpha(*ptr2))
		-- ptr2;
	if(tolower(*ptr1) != tolower(*ptr2))
		return false;
	else
   		{
		ptr1 ++;
		ptr2 --;
		}

	}
return true;
}



int main()
{
char message[MAX_SIZE + 1];
readline(message,MAX_SIZE);
bool result = is_palindrome(message);
if(result == true)
	printf("Palindrome");
else
	printf("Not palindrome");
return 0;
}

int readline(char *p,int n)
{
char ch;
int cnt = 0;
while((ch = getchar()) != '\n')
	{
	if(cnt < n)
		{*p ++= ch;
		++ cnt;
		}
	}
*p = '\0';
return cnt;
}

运行

hE LIVED AS A DEVIL,EH?
Palindrome

18.

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 20
char *month_sets[12] = {"Januday",
	"February","March","Apail","May","June","July",
	"August","September","October","November","December"};
void conversion_format(const char *);
int main()
{
char message[MAX_SIZE];
scanf("%s",message);
conversion_format(message);
return 0;
}

void conversion_format(const char *message)
{
char month[3];
char day[3];
char year[5];
int month_int;
//处理月份 
int i = 0;
while(*message != '/')
{
	month[i ++] = *message ++;
}
month[i] = '\0';

//处理day
++ message;
i = 0;
while(*message != '/')
{
   day[i ++] = *message ++;
}
day[i] = '\0';

//处理年份
++ message;
i = 0;
while(*message != '\0')
{
year[i ++] = *message ++;
}

//将字符串格式转换成整形,需要包含头文件stdlib.h
month_int = atoi(month);
printf("%s  %s,%s",month_sets[month_int-1],day,year);

}

运行 

2/23/2021
February  23,2021

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发狂的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值