问题描述
- 书本题目不会解,程序已经编好了,但是不知道错哪??
-
题目是:要求使用指针处理下面的问题,输入四个字符串,按由小到大顺序输出。
我写的程序如下:
#include "stdafx.h"
#include
#include
using namespace std;
int main()
{
void swap(char *,char *);
char str1[20],str2[20],str3[20],str4[20];
cout<<"请输入四个字符串:"<
cin>>str1[20];
cin>>str2[20];
cin>>str3[20];
cin>>str4[20];
if(strcmp(str1,str2)>0) swap(str1,str2);
if(strcmp(str1,str3)>0) swap(str1,str3);
if(strcmp(str1,str4)>0) swap(str1,str4);
if(strcmp(str2,str3)>0) swap(str2,str3);
if(strcmp(str2,str4)>0) swap(str2,str4);
if(strcmp(str3,str4)>0) swap(str3,str4);
cout<<"从小到大的排序是:"<<endl;
cout<<str1<<" "<<str2<<" "<<str3<<" "<<str4<<endl;
return 0;
}
void swap(char *p1,char *p2,char *p3)
{
char p[20];
strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p3);strcpy(p3,p);strcpy(p,p2);strcpy(p1,p3);
}
最后程序错误,他显示:
(1)warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
(2)参见“strcpy”的声明
(3)error LNK2019: 无法解析的外部符号 "void __cdecl swap(char *,char *)" (?swap@@YAXPAD0@Z),该符号在函数 _main 中被引用
(4)fatal error LNK1120: 1 个无法解析的外部命令
我不知道最后void swap那里要怎么写,strcpy要怎么用啊???请各位解决!!!!
解决方案
以上程序有四个问题
1、第2、3行的#include语句没有指明文件 这样编译肯定通不过
应该这样:
#include
#include
因为main函数中用到了 cin cout和strcmp
2、使用的swap函数但没有在main函数之前声明 所以肯定会报 无法解析的外部符号错误
3、你调用的swap函数和 后面实现的swap函数参数个数不一致 所以就算声明了 也肯定调用不了
4、按照swap函数的意思是交换 但是以上的实现根本无法完成交换功能
这样改应该就可以了
#include <stdio.h>
#include <iostream>
using namespace std;
void swap(char *p1,char *p2/*,char *p3*/);
int main()
{
void swap(char *,char *);
char str1[20],str2[20],str3[20],str4[20];
cout<<"请输入四个字符串:"< cin>>str1[20];
cin>>str2[20];
cin>>str3[20];
cin>>str4[20];
if(strcmp(str1,str2)>0) swap(str1,str2);
if(strcmp(str1,str3)>0) swap(str1,str3);
if(strcmp(str1,str4)>0) swap(str1,str4);
if(strcmp(str2,str3)>0) swap(str2,str3);
if(strcmp(str2,str4)>0) swap(str2,str4);
if(strcmp(str3,str4)>0) swap(str3,str4);
cout<<"从小到大的排序是:"<<endl;
cout<<str1<<" "<<str2<<" "<<str3<<" "<<str4<<endl;
return 0;
}
void swap(char *p1,char *p2/*,char *p3*/)
{
char p[20];
//strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p3);strcpy(p3,p);strcpy(p,p2);strcpy(p1,p3);
strcpy(p,p1);strcpy(p1,p2);strcpy(p2, p);
}
解决方案二:
#include
#include
#include
using namespace std;
void swap(char p1,char *p2/,char p3/);
int main()
{
void swap(char *,char *);
char str1[20],str2[20],str3[20],str4[20];
cout<<"请输入四个字符串:"<
cin>>str1;
cin>>str2;
cin>>str3;
cin>>str4;
if(strcmp(str1,str2)>0) swap(str1,str2);
if(strcmp(str1,str3)>0) swap(str1,str3);
if(strcmp(str1,str4)>0) swap(str1,str4);
if(strcmp(str2,str3)>0) swap(str2,str3);
if(strcmp(str2,str4)>0) swap(str2,str4);
if(strcmp(str3,str4)>0) swap(str3,str4);
cout<<"从小到大的排序是:"<<endl;
cout<<str1<<" "<<str2<<" "<<str3<<" "<<str4<<endl;
Sleep(INFINITE);
return 0;
}
void swap(char p1,char *p2/,char p3/)
{
char p[20];
//strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p3);strcpy(p3,p);strcpy(p,p2);strcpy(p1,p3);
strcpy(p,p1);strcpy(p1,p2);strcpy(p2, p);
}
代码如上,已调试OK
解决方案三:
这不是c++吧你确定吗