c++-函数中字符串用cout输出与字符串长度没有关系吧!

问题描述

函数中字符串用cout输出与字符串长度没有关系吧!
 下面的代码运行于VS2012的编译环境,目的是为了对出现的19个国家名称进行按大到小排序,遗憾的是,结果结果并没有得出。
但有一点,若是将主程序中的 pCountryName这一指针数组中的"United States of America"缩减一个字符如变为"United State of America",程序将运行无恙。
同样的代码,放置于Vc++6.0的编译环境却不会出现问题!
程序在执行过程中,执行至内部函数HeapAlloc()时会出问题。
大神,求破!

// CountryOrder.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "string.h"
#include "iostream" strong text
#include "malloc.h"
#define COUNTRYNAME 100
using namespace std;

void NameSort(char** pName)
{
int nlen=19;
bool* pbflg=new bool[nlen];//存储临时标识状态
for(int i=0; i<nlen; i++)//动态数组的初始化
{
pbflg[i]=false;
}
int ncmpNum=0, nMinPos=0;
char *pstrMin=new char(COUNTRYNAME);
char *pstrMax=new char(COUNTRYNAME);
strcpy(pstrMin, pName[0]);

for (int i=1; i<nlen;i++)//获取最小的字符串,及其位置
{
    ncmpNum=strcmp(pstrMin, pName[i]);
    if (ncmpNum>0)
    {
        nMinPos=i;
        strcpy(pstrMin, pName[i]);
    }
}

for(int i=0; i<nlen; i++)//将各个字符串分别与最小字符串进行比较,每次只获取当前序列中最大的字符串
{
    if (i==nMinPos)
    {
        continue;
    }
    int nRecord=0;
    int k=0;//用于判断选择要处理的数据位置
    while (pbflg[k])
    {
        k++;
    }
    nRecord=k;
    strcpy(pstrMax, pstrMin);//以最小值为基准参考

    for(int j=k; j<nlen; j++)//获取当前序列中的最大值
    {
        if(pbflg[j]||j==nMinPos)//跳过已经输出的字符串以及对参考位的比较
        {
            continue;
        }
        ncmpNum=strcmp(pstrMax,pName[j]);
        if (ncmpNum<0)
        {
            pbflg[nRecord]=false;
            pbflg[j]=true;
            nRecord=j;
            strcpy(pstrMax, pName[j]);
        }
    }
    cout<<pstrMax<<endl;
}
cout<<pstrMin<<endl;

// delete pstrMin;
// delete pstrMax;
// delete []pbflg;
// pstrMax=NULL;
// pstrMin=NULL;
// pbflg=NULL;
}

int _tmain(int argc, _TCHAR* argv[])
{
char* pCountryName[19]={"China", "United States of America", "United Kingdom", "Uruguay", "Uzbekistan","Vanuatu","Vatican City","Venezuela","Japan", "Hong Kong", "Macau", "Chinese Tapei","Vietnam","Wallis and Futuna ","Western Sahara","Yemen","Yugoslavia","Zambia","Zimbabwe"};
NameSort(pCountryName);

return 0;

}

时间: 2024-08-04 06:46:00

c++-函数中字符串用cout输出与字符串长度没有关系吧!的相关文章

关于mysql中int数据类型储存最大数值与长度的关系

问题描述 关于mysql中int数据类型储存最大数值与长度的关系 关于mysql中int数据类型储存最大数值与长度的关系关于mysql中int数据类型储存最大数值与长度的关系关于mysql中int数据类型储存最大数值与长度的关系关于mysql中int数据类型储存最大数值与长度的关系 解决方案 int最大长度是11. 最大值是 2147483647 (2^31 – 1) 最小值是 -2,147,483,648(-2^31 ) 如果在建表时不指定字段int类型的长度时,系统则默认生成长度为11的字段

函数中的形式参数和实际参数

1.举例:使用函数交换两个整形变量的值 运行结果: 分析: c语言中实际参数和形式参数之间采用值传递的方式来传递数据.在被调函数中,使用的是实际参数的一个拷贝数据.我们在swap函数中交换了a和b,那只是主函数x,y数据的一个备份,不能对main函数中的x,y产生影响,就像我们修改了一个复印件,不会对原件造成任何影响. 形式参数和实际参数可以不同名. 使用数组作为函数的形式参数,可以完成两个整数的交换.传递的是数组的名字(数组的第一个元素的起始地址) 2.使用数组作为函数的参数,交换数据: 运行

在主函数中输入一个字符串str1,调用函数。

问题描述 在主函数中输入一个字符串str1,调用函数. 在主函数中输入一个字符串str1,调用函数chage(str1,N);将str1 中的小标为奇数的字符取出构成一个新的字符串放入字符串str2中.然后在主函数中输出字符串str2.运用到数组的引用. #include #define N 10 using namespace std; void chage(char str2[],int n); int main() { char str1[N]; for(int i=0;i cin>>s

char to-vs2008中怎么把一字符串通过对话框输出,我的字符串是Ascll码的

问题描述 vs2008中怎么把一字符串通过对话框输出,我的字符串是Ascll码的 我尝试用messagebox函数,MessageBox(ch);但会有错误: error C2664: "CWnd::MessageBoxW": 不能将参数 1 从"char [100]"转换为"LPCTSTR" 解决方案 ch 的定义从错误上来看应该是 char 型的数组,所以有两个方法:1) 如果你的工程可能是 Unicode 的,所以默认调用了 Unicode

c语言-C语言中如何让几百个字符串输出的时候排列整齐,像表格一样?

问题描述 C语言中如何让几百个字符串输出的时候排列整齐,像表格一样? 解决方案 你说的是右边对齐?还是说每个字符上下对齐? 解决方案二: 得到这些文本中最长的一行的字符数,然后每一行根据计算平均把差的字符分摊到空格中

c语言问题-c语言 fun函数中的for语句中的小*为啥不能输出如何解决

问题描述 c语言 fun函数中的for语句中的小*为啥不能输出如何解决 #include void fun(char a) { int n=0,i=0; char *p=a; while(*p=='') { p++; n++; } while(*p!='/0') { a[i++]=*p; p++; } for(;n>0;n--) { a[i++]='*'; } a[i]=0; } main() {char s[81]; int n=0; void NONO (); printf("Ente

输出-在asp中比较记录集字段与字符串时的问题

问题描述 在asp中比较记录集字段与字符串时的问题 ' rs 是记录集 If rs("num")="1" Then Response.Write "1" End If If rs("num")=Server.HTMLEncode("1") Then Response.Write "2" End If 结果只输出 1,不输出 2.请问这是为什么,为什么第二个 If 的比较会是 False?

字符串用xml输出-asp.net替换xml中的值并输出xml

问题描述 asp.net替换xml中的值并输出xml 例: xml 模板: <?xml version="1.0" standalone="yes"?> {Manpower.ID},{Manpower.Name} {Manpower.Age}{Manpower.Gender} {Project.ID} 替换掉所有{*} 问题: 先将xml模板读成string类型,找到所有的{*},但是不知道怎样将{*}替换成想要的值,并将替换值后字符串用xml输出,坐等

返回值-为什么最后输出结果会是0?当被调函数中的if语句不成立时不想要它返回该如何?

问题描述 为什么最后输出结果会是0?当被调函数中的if语句不成立时不想要它返回该如何? #include<stdio.h> char a[15]; int count=0; int fun(int store,int flower,int wine,int i) { if(store>5 || flower>10) return 0; else if(store==5 && flower==10 && i==15) { if(wine==0 &