c++-书本题目不会解,程序已经编好了,但是不知道错哪??

问题描述

书本题目不会解,程序已经编好了,但是不知道错哪??

题目是:要求使用指针处理下面的问题,输入四个字符串,按由小到大顺序输出。
我写的程序如下:
#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++吧你确定吗

时间: 2024-10-03 13:35:14

c++-书本题目不会解,程序已经编好了,但是不知道错哪??的相关文章

c++-C++编程题,书本题目不会解

问题描述 C++编程题,书本题目不会解 编写一个程序,处理5个学生的信息,每个学生的信息包括:学号.姓名.三门成绩.要求从键盘输入学生的数据,并输出成绩表(包括每个学生的学号.姓名.三门成绩及平均分数),并输出平均分在前3名的学生的姓名及平均分. 调试处理5个学生信息的程序,输出平均分在前3名的学生的姓名及平均分. 有一个参考程序,但是我不知道要怎样输入数据...... 处理5个学生的信息的参考程序: //sy7_1.cpp #include "iostream" using name

string-java新手求助:学到方法了,遇到一题目,已经解出,但求更多的解决方法。

问题描述 java新手求助:学到方法了,遇到一题目,已经解出,但求更多的解决方法. 新手学习,刚学到了方法,但其中但参数和方法调用其实不是很明白.跟着课本做了一道题.附上题目和我的代码.请求各方面的指点,改进我的代码也好.指出不对的也好.提供新的解题方法或代码的也好,多多益善: 题目如下: 一个五角数被定义为n(3n-1)/2,其中n=1,2,3,4,5··············所以,开始的几个数字就是1,5,12,22 编写下面的方法,返回一个五角数. public static int g

malloc-小弟谢了一个简单的字符串求最大子串的程序不知道错哪里,請大神帮忙回答下

问题描述 小弟谢了一个简单的字符串求最大子串的程序不知道错哪里,請大神帮忙回答下 程序要求如下: 一个字符串,字符连续的部分为子串(不含带数字的部分) 下面是我写的程序 #include using namespace std; char* BiggestStr(char* str) { char* pStr = (char*)malloc(sizeof(str)+1); //申请一个空间存最大子串 int nCount = 0; //用于记录最大子串的长度 int J_nCount=0; ch

c++-win32 C++应用程序放到Server08下连接oracle报错

问题描述 win32 C++应用程序放到Server08下连接oracle报错 程序是C++的,连接本地Oracle数据库,方法为 CoInitialize(NULL);ConnectionPtr conn; try{ conn.CreateInstance(_uuidof(Connection)); conn->Open("Provider=OraOLEDB.Oracle.1;Data Source=ORACLE;Persist Security Info=false;Password=

iOS程序在模拟器上无法运行,报错126

问题描述 iOS程序在模拟器上无法运行,报错126 .../Pods/Target Support Files/Pods/Pods-resources.sh: /bin/sh: bad interpreter: Operation not permitted Command /bin/sh failed with exit code 126 解决方案 iOS 模拟器运行报错 解决方案二: * ## 首先你要确定是程序问题还是模拟器问题.这样:新建一个iOS项目,直接运行,如果能正常运行,就说明模

程序是树的创建-程序崩溃问题,系统不报错。

问题描述 程序崩溃问题,系统不报错. #includeusing namespace std;templatestruct TreeNode{ T data; TreeNodeFirstChild*NextBrother;public: TreeNode(T value=0TreeNode L=NULLTreeNode* R=NULL){ data=value; FirstChild=L; NextBrother=R; } TreeNodeGetFirstChild()const{return

vs2012-我的C程序VS2013报错,都不知道错哪了,请大神指教

问题描述 我的C程序VS2013报错,都不知道错哪了,请大神指教 hash函数名和数组next都定义了,都不知道哪错了 解决方案 感觉是标准库的某些内容重复了. std::next是里的template, std::hash是里的template. 都是c++ 11定义的. 解决方案二: 自己重新定义一下名字,这几个名字已经在类库中存在了 解决方案三: 你的定义重复了,如果你的代码没有重复定义它们,可能是和你包含的库文件冲突了,那么换个名字看看 解决方案四: hash和next重复定义了. 你可

c++-请问大神这个程序怎么写,主要是不知道 文件名怎么传

问题描述 请问大神这个程序怎么写,主要是不知道 文件名怎么传 解决方案 #include<iostream>#include<vector>using namespace std;int main(){ vector<double> vec_num; vec_num.push_back(1.1); vec_num.push_back(1.5); vec_num.push_back(1.2); vector<double>::reverse_iterator

mysql-求助。。java程序访问数据库试用AS别名报错Column &amp;amp;#39;userid&amp;amp;#39; not found.

问题描述 求助..java程序访问数据库试用AS别名报错Column 'userid' not found. 本人小白java程序中访问mysql数据库去掉AS别名就可以正常访问,加上别名就报错Column 'userid' not found. 这个别名很重要..求大神帮助 解决方案 as这个关键字是可以省略的 解决方案二: AS别名指定的是返回的column的名称,要看你在JDBC中是怎么使用的了. 检查下所有使用了userid列名称的地方是否都正确设置了AS 别名了呢. 解决方案三: sp