函数中字符串用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;

}

c++
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
不用strcat函数,实现字符串的连接,如把字符串1连接到字符串2的尾部
//输出的结果中有错误 //如输入china,chinese,输出chinachiΓFnese; #include <iostream> using namespace std; void link(char str1[],char str2[]) { for(int i=0,j=0;str2[j]!='\0';i++,j++) { while(str1[i]!='\0') { i++; } str1[i]=str2[j]; } } int main () { char str1[180]; char str2[180]; cout<<"输入字符串1"<<endl; cin>>str1; cout<<"请输入字符串2"<<endl; cin>>str2; link(str1,str2); cout<<"把str1与str2连接后的字符串是"<<str1; return 0; }
编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。
编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。 #include <iostream> using namespace std; int main() { char a[500]; char b[500]; cin>>a; for(int i=0;i<500;i++) { if( (a[i]>'a' && a[i]<'z')||(a[i]>'A' && a[i]<'Z') ) { cout<<a[i]; } } return 0; } 输出结果乱码... 跪求大神指错啊...能给出代码就更好了...QAQ
在主函数中输入一个字符串str1,调用函数。
在主函数中输入一个字符串str1,调用函数chage(str1,N);将str1 中的小标为奇数的字符取出构成一个新的字符串放入字符串str2中。然后在主函数中输出字符串str2.运用到数组的引用。 #include<iostream> #define N 10 using namespace std; void chage(char str2[],int n); int main() { char str1[N]; for(int i=0;i<N;i++) cin>>str1[i]; chage(str1,N); for(int i=0;i<N/2;i++) cout<<str1[i]; return 0; } void chage(char str2[],int n) { int c=0; for(int j=0;j<n;j++) { if(j%2!=0) { str2[c++]=str2[j]; } } } 我的哪里错了?求注释和解答啊。如果有更好的程序麻烦写一下谢谢
C++初学者一名,不太明白怎么做这道题,求解答
设计一个void类型的函数reverse_string,其功能是将一个给定的字符串逆序。例如,给定字符串为“hello”,逆序后为“olleh”。 函数接口定义如下: /* 函数原型参见main函数 */ 裁判测试程序样例: #include <iostream> #include <string> using namespace std; /* 你的代码将嵌在这里 */ int main(int argc, char const *argv[]) { string str; getline(cin, str); //输入字符串 reverse_string(str); //逆序字符串str cout << str << endl; //输出逆序后的字符串 return 0; } 输入样例: hello 输出样例: olleh
c++程序填空字符串获取字符
获取字符串的前n个字符(默认的函数参数) #include <iostream> #include <cstring> //获取字符串的前n个字符,n默认值为1 char * left(______________________________) ; int main() { char s[]="fdsfdsfds234234543543scfxzDSGFD*&ASGFwR12%$^"; std::cout<<left(s)<<':'<<left(s,10)<<':'<<left(s,100)<<std::endl; return 0; } char *left(const char *s,int n) { ________________________________________ ________________________________________ ________________________________________ ________________________________________ ________________________________________ ________________________________________ ________________________________________ ________________________________________ ________________________________________ } 输入 无 输出 字符串"fdsfdsfds234234543543scfxzDSGFD*&ASGFwR12%$^"的前1、10、100个字符。
c++程序填空求大佬帮忙
用递归方法实现判回文字符串的函数。 #include <iostream> #include <cstring> #define M 80 //要求用递归方法实现该函数 bool isPalindrome(const char *s,int low,int high) { //...... } //函数isPalindrome被重载 bool isPalindrome(const char *s) { return isPalindrome(s,0,strlen(s)-1); } int main() { char s[M]; while (std::cin.getline(s,M)) { if (isPalindrome(s)) std::cout<<'Y'; else std::cout<<'N'; } std::cout<<std::endl; return 0; } 输入 有n行,每行是一个长度不超过80的字符串 输出 n个YN组成的字符串,对应行的字符串是回文输出Y否则输出N
请问这题怎么写?不能调用系统函数
根据主函数编写字符串处理函数mystrcpy; 功能:将字符串s2 拷贝到字符串s1 中,并将字符串s1返回。 void main(){ char s1[50],s2[50]; cout<<"请输入一行D语句,中间不要有空格:"; cin>>s2; cout<<"您输入的是:"<<s2<<endl; mystrcpy(s1,s2); cout<<"s1:"<<s1<<endl; }
为什么只有在直接打印一次字符串后,控制台才会显示调用函数打印的数组字符串
这是正常代码,但打印不出来 ``` #include <iostream> using namespace std; int i = 0; void show(const char* str, int sth = 0); int main() { char str[20] = "hello again,world!"; show(str); show(str,2); return 0; } void show(const char* str, int sth) { i++; if(sth == 0) { cout << str << endl; } else { for(int n=i; n>0; n--) { cout << str << endl; } } } ``` 打印结果如图![图片说明](https://img-ask.csdn.net/upload/201909/04/1567602160_189724.jpg) 这是加了一个直接打印字符串的代码后 ``` #include <iostream> using namespace std; int i = 0; void show(const char* str, int sth = 0); int main() { char str[20] = "hello again,world!"; show(str); show(str,2); return 0; } void show(const char* str, int sth) { cout << "??什么问题??"; i++; if(sth == 0) { cout << str << endl; } else { for(int n=i; n>0; n--) { cout << str << endl; } } } ``` 打印结果如图![图片说明](https://img-ask.csdn.net/upload/201909/04/1567602274_399378.jpg) 在函数定义时把默认值也加入后,编译器就会检测出错误,如图: ![图片说明](https://img-ask.csdn.net/upload/201909/12/1568246271_954734.jpg) 错误 ![图片说明](https://img-ask.csdn.net/upload/201909/12/1568246287_318460.jpg)
C++为什么strlen函数不能测量虚参string的长度
我想要对一个字符串进行长度的测量,我新建了一个函数,但是使用strlen时候报错了 代码片段在 ``` int test(string s){ cout<<strlen(s); int number=0; for(int i = 0;i<17;i++){ number += (s[i]-'0')*quanzhong[i]; } number%=11; //cout<<number; return number; } int main() { string s = ""; getline(cin,s); int ans = test(s); if(match[ans] == s[17]-'0') cout<<"正确"; } ```
关于C++构造函数生成空字符串。。。
class CString { char m_buff[MAXLENGTH]; public: CString(); //构造函数1,设置为空字符串 ~CString(); friend ostream& operator<<(ostream& Out, const CString& S); //输出字 符串 char operator[](int i)const; }; CString::CString() { m_buff[0]=NULL; } char CString::operator[](int i)const { return m_buff[i]; } ostream& operator<<(ostream& Out, const CString& S) { return Out<<S.m_buff<<endl; } CString::~CString() { delete[] m_buff; } void main() { CString s1; cout << s1; } 这是其中一段
为什么键盘输入字符串和文件导入字符串都有错?错误应该怎么改?
``` #include <iostream.h> #include <windows.h> #include <string> #include<fstream> using namespace std; class Stack;//类Stack的声明 /* 定义一个链栈结点类Stacknode */ class Stacknode { friend class Stack;//申请友元类 private: Stacknode(Stacknode *nextp=NULL);//构造函数 Stacknode(char &newdata,Stacknode *nextp=NULL);//构造函数 int data;//数据元素 Stacknode *next;//递归定义指向后继结点的指针 }; /* Stacknode的实现部分 */ Stacknode::Stacknode(Stacknode *nextp)//构造函数 { next=nextp; } Stacknode::Stacknode(char &newdata,Stacknode *nextp)//构造函数 { data=newdata; next=nextp; } //结点类Stacknode的定义结束 /* 定义一个链栈类Stack */ class Stack { public: Stack();//创建一个空栈 ~Stack();//回收一个栈 void clear();//销毁一个栈 bool empty() const;//确定栈是否已空 bool push(char &item);//把数据压进栈 bool pop();//出栈 bool pop(char &item);//把数据弹出栈,返回 bool top(char &item) const;//取出栈顶元素 private: Stacknode *newnode(Stacknode *nextp=NULL); Stacknode *newnode(char &item,Stacknode *nextp=NULL);//创建新的结点 Stacknode *Stacktop; int Stacklength; }; /* Stack的实现部分 */ Stacknode *Stack::newnode(Stacknode *nextp)//创建新的结点,不带数据 { return new Stacknode(nextp); } Stacknode *Stack::newnode(char &item,Stacknode *nextp)//创建新的结点,数据域赋值 { return new Stacknode(item,nextp); } //以下为栈类Stack的函数定义 Stack::Stack()//创建一个空栈 { Stacktop=newnode();//创建一个栈顶指针初始化,相当于Stacktop=NULL;本链表没有用头结点 Stacklength=0; } Stack::~Stack()//回收一个栈 { clear(); delete Stacktop;//释放栈底 } void Stack::clear()//销毁一个栈 { while(pop());//不停地出栈,而每次释放空间在出栈函数中完成 } bool Stack::empty() const//确定栈是否已空 { return Stacklength<=0?true:false; } bool Stack::push(char &item)//数据进栈 { Stacknode *newnodep;//定义指针newnodep,准备指向申请的新结点 newnodep=newnode(item,Stacktop);//申请新结点,把数据存入,把指针域指向头指针 if(!newnodep)//如果没有申请到空间,返回失败 return false; Stacktop=newnodep;//改链,完成进栈 Stacklength++;//栈的长度增加 return true;//本次操作成功 } bool Stack::pop()//出栈,不要栈顶数据 { Stacknode *usednodep;//定义指针usednodep,准备指向出栈的结点 if(!empty())//判断是否栈空 { usednodep=Stacktop;//指向出栈的结点 Stacktop=Stacktop->next;//栈顶指针后移 delete usednodep;//释放空间 Stacklength--;//栈的长度减少 return true;//本次操作成功 } return false;//否则本次操作失败 } bool Stack::pop(char &item)//出栈,把栈顶数据弹返回去 { Stacknode *usednodep;//定义指针usednodep,准备指向出栈的结点 if(!empty())//判断是否栈空 { usednodep=Stacktop;//指向出栈的结点 Stacktop=Stacktop->next;//栈顶指针后移 item=usednodep->data;//把数据保留下来,返回去 delete usednodep;//释放空间 Stacklength--;//栈的长度减少 return true;//本次操作成功 } return false;//否则本次操作失败 } bool Stack::top(char &item) const//取出栈顶数据返回去 { if(!empty())//如果栈不空,记录当前栈顶元素 { item=Stacktop->data;//通过item返回去 return true;//本次操作成功 } return false;//否则本次操作失败 } /* 定义一个功能类SymbolMatching */ class SymbolMatching { private: Stack *stack; public: SymbolMatching();//构造函数 ~SymbolMatching();//析构函数 bool manualinputdatabase(char *database);//人工输入数据信息 bool fileguidedatabase(char *filename);//文件导入数据信息 }; SymbolMatching::SymbolMatching()//构造函数 { stack=new Stack; } SymbolMatching::~SymbolMatching()//析构函数 { delete stack; } bool SymbolMatching::manualinputdatabase(char *database)//人工输入数据信息 { int i=0; char match,symbol; bool is_match=true; while(database[i]!='\0'&&is_match) { symbol=database[i++]; if(symbol=='('||symbol=='{'||symbol=='[') stack->push(symbol);//入栈 else if(symbol==')'||symbol=='}'||symbol==']') { if(stack->empty()) { if(database[i+1]!='\0') cout<<"右边符号多于左边符号!"<<endl; else cout<<"符号"<<symbol<<"无法找到与之匹配的符号!"<<endl; is_match=false; } else { stack->top(match); stack->pop();//出栈 is_match=(symbol==')'&&match=='('||symbol==']'&&match=='['||symbol=='}'&&match=='{'); if(!is_match) cout<<"符号"<<match<<"和"<<symbol<<"不匹配!"<<endl; } } } if(is_match) { if(!stack->empty())//栈不为空 { cout<<"左边符号多于右边符号!"<<endl; is_match=false; } else cout<<"左右符号匹配次序正确!"<<endl; } stack->clear(); return is_match; } bool SymbolMatching::fileguidedatabase(char *filename)//文件导入数据信息 { int i=0; char match,symbol; bool is_match=true; while(filename[i]!='\0'&&is_match) { symbol=filename[i++]; if(symbol=='('||symbol=='{'||symbol=='[') stack->push(symbol);//入栈 else if(symbol==')'||symbol=='}'||symbol==']') { if(stack->empty()) { if(filename[i+1]!='\0') cout<<"右边符号多于左边符号!"<<endl; else cout<<"符号"<<symbol<<"无法找到与之匹配的符号!"<<endl; is_match=false; } else { stack->top(match); stack->pop();//出栈 is_match=(symbol==')'&&match=='('||symbol==']'&&match=='['||symbol=='}'&&match=='{'); if(!is_match) cout<<"符号"<<match<<"和"<<symbol<<"不匹配!"<<endl; } } } if(is_match) { if(!stack->empty())//栈不为空 { cout<<"左边符号多于右边符号!"<<endl; is_match=false; } else cout<<"左右符号匹配次序正确!"<<endl; } stack->clear(); return is_match; } /* 定义一个实现链栈功能的菜单处理类interfacebase */ class interfacebase { private: SymbolMatching SymbolMatchingonface; public: void clearscreen(void);//清屏 void showmenu(void);//显示菜单函数 int userchoice(void);//用户的选项 void processmenu(int menuchoice);//菜单函数 }; /* interfacebase类的实现部分 */ void interfacebase::clearscreen(void) { system("cls"); } void interfacebase::showmenu(void) { cout<<"链式堆栈实现括号匹配判断的功能菜单"<<endl; cout<<"=================================="<<endl; cout<<"1.人工输入数据信息"<<endl; cout<<"2.文件导入数据信息"<<endl; cout<<"0.退出"<<endl; cout<<"=================================="<<endl; } int interfacebase::userchoice(void) { int menuchoice; cout<<"请输入您的选择:"; cin>>menuchoice; return menuchoice; } void interfacebase::processmenu(int menuchoice) { switch(menuchoice)//根据用户的选择进行相应的操作 { case 1: { string str; char temp; cout<<"输入字符串,按回车键结束输入:"<<endl; while((temp=cin.get())!='\n') { str +=temp; } const int LEN =str.length(); char* database = new char[LEN];//根据输入字符串的长度,创建字符数组 for(int i = 0;i<LEN;i++) //将字符串保存到字符数组中 { database[i]=str[i]; } SymbolMatchingonface.manualinputdatabase(database); delete database; } break; case 2: { ifstream in("data.txt"); char data,j,*filename=new char[100]; int num=0; while(!in.eof()) { in>>data; filename[num]=data; cout<<filename[num]; num++; } cout<<endl; SymbolMatchingonface.fileguidedatabase(filename); delete filename; } break; case 0: exit(0); default: cout<<"对不起,您输入的功能编号有错!请重新输入!!!"<<endl; break; } } /* 程序主入口 */ void main(void) { int menuchoice;//定义变量,菜单选单项的选择 interfacebase interfacebasenow; system("color f0");//修改屏幕的背景色和字的颜色 interfacebasenow.clearscreen();//清屏 while(1)//永真循环 { interfacebasenow.showmenu();//显示菜单 menuchoice=interfacebasenow.userchoice();//获取用户的选择 interfacebasenow.processmenu(menuchoice);//处理用户的选择 system("pause"); interfacebasenow.clearscreen();//清屏 } }//主函数结束 ```
向函数模板中传入字符串,typeid()和if的搭配会失效,编译不通过,怎么办?
我写了个函数模板里用到了typeid,判断传入变量的类型。传入整型和浮点型都没问题,传入字符串直接编译不通过。 ```C #include <iostream> #include <typeinfo> #include <string> using namespace std; struct Item { int intvalue=0; double doublevalue=0.0; string stringvalue=""; }; template <typename T> void TypeDetect(Item *p, T elem) { if (*typeid(elem).name() == 'i') p->intvalue = elem; else if (*typeid(elem).name() == 'd') p->doublevalue = elem; else if (*typeid(elem).name() == 'P') p->stringvalue = elem; } int main() { Item *p1 = new Item, *p2 = new Item, *p3 = new Item; TypeDetect(p1, 1); TypeDetect(p2, 1.1); TypeDetect(p3, "abc"); cout << p1->intvalue << endl; cout << p2->doublevalue << endl; cout << p3->stringvalue << endl; return 0; } ``` 直接编译上述代码会报错: invalid conversion from 'const char*' to 'int' [-fpermissive] [15, 21] cannot convert 'const char*' to 'double' in assignment [17, 24] 但注释掉 ```C TypeDetect(p3, "abc"); ``` 就可以编译运行了。这是为什么?传入字符串后typeid应该会判断它是一个指针,然后通过if语句判断,但似乎编译器就不认我写的三个if语句。
关于c++字符串的复制的简单问题
求将一个字符串第m个字符后的所有字符都复制给另一个字符串的函数实现过程。我写得程序太乱了,思路也不清唽,就不放上来了…总而言之,strcpy这个函数是怎样实现的?上面那个函数要怎么写?求大神解惑! 看了一下回答,但是没有解决我的问题,这是我写的程序,但错在哪里?如何修改呢? char strcpy_ex(char*a,int n) { int i; char b[]; for(i=0;a[i]!='\0';i++) { b[i]=a[i+n]; } return b; } int main(int argc, char* argv[]) { char a[]="thisisastring"; cout<< strcpy_ex(a,3); }
C++菜鸟关于利用数组实现字符串相关操作的提问
打算利用数组实现关于顺序串的一些操作,程序源代码如下: #include "stdio.h" #include "stdlib.h" #include "conio.h" #include "string.h" #include<iostream> using namespace std; #define OK 1 void output(char *s) //2.输出串 { if(s[1]='0') cout<<"该串为空串,请重新输入!"<<endl; else cout<<s<<endl; } void input(char s[]) //1.输入串 { cout<<"请输入串:"<<endl; cin>>s; } int length(char s[]) //3.计算串的长度 { int i=0; if(s[0]='0') cout<<"该串为空串,请重新输入!"<<endl; else { while(s[i]!='\0') i++; cout<<"该串长为:"<<i<<endl; } return i; } void Insert(char s[], int i, char t[]) //4.在串s的第i个位置插入串s1形成串s2 { char q[255]; strcpy(q,s); if(i>length(s)-1) cout<<"插入位置超出串长,请重新输入"<<endl; else { if(length(q)+length(t)>255) cout<<"overflow"<<endl; else { for(int j=length(q)-1;j>=i;j--) q[j+length(q)]=q[j]; for(j=0;j<length(t);j++) q[j+i]=t[j]; } cout<<q<<endl; } } void del(char s[],int i,int j) //5.从在串s的第i个字符开始连续删除j个字符形成串s3 { char q[255]; strcpy(q,s); int len=length(q); if((i<0)||(i<len)) cout<<"i值不在串长度范围内,不能删除"<<endl; else { for(int k=i+j;k<len;k++) q[k-j]=q[k]; cout<<q<<endl; } } void replace(char s[],int i,int j,char t[]) //6.将串s的第i个字符开始的j个字符替换成串s1而产生串s4 { char q[255]; strcpy(q,s); int lens=length(s); int lent=length(t); if((lent>j)||(lens-i<j)) cout<<"串s的剩余长度不足,请重新选择位置i"<<endl; else { for(int k=0;k<j;k++) q[i-1]=t[k]; cout<<q<<endl; } } void substr(char s[],int i,int j) //7.提取串s的第i个字符开始的j个字符而产生串s5 { char q[255]; strcpy(q,s); int lens=length(s); if((j>lens)||(lens-i<j)) cout<<"串s的剩余长度不足,请重新选择位置i"<<endl; else { char p[255]; for(int k=0;k<j;k++) { p[k]=q[i]; i++; } cout<<p<<endl; } } void contact(char s[],int i,char t[]) //8.将串s1和串s2连接起来而产生串s6 { char q[255]; strcpy(q,s); if(i>length(s)-1) cout<<"插入位置超出串长,请重新输入"<<endl; else { if(length(q)+length(t)>255) cout<<"overflow"<<endl; else { for(int j=length(q)-1;j>=i;j--) q[j+length(q)]=q[j]; for(j=0;j<length(t);j++) q[j+i]=t[j]; } } char p[255]; int lens=length(s); int lenq=length(q); if(lens+lenq>255) cout<<"overflow"<<endl; else { for(int m=0;m<lens-1;m++) p[m]=s[m]; for(int n=0;n<lenq-1;n++) p[n+m+1]=q[n]; cout<<p<<endl; } } void index(char s[],char t[]) //9.求子串s1在s中位置 { int i=0,j=0; int lens=length(s); int lent=length(t); while((i<lens)&&(i<lent)) { if(s[i]==t[j]) { i++; j++; } else { i=i-j+1; j=0; } if(j>=lent) cout<<i-lent<<endl; else cout<<"并未在串s中找到与串s1匹配的子串"<<endl; } } char menu() //选择菜单 { char i; printf("----------------请选择相应操作:-----------\n"); printf("----------------a.输出串s-----------------\n"); printf("----------------b.输出串s1----------------\n"); printf("----------------c.求s串长-----------------\n"); printf("----------------d.求s1串长----------------\n"); printf("----------------e.在串s的第i个位置插入串s1形成串s2----------------\n"); printf("----------------f.从在串s的第i个字符开始连续删除j个字符形成串s3---------------\n"); printf("----------------g.将串s的第i个字符开始的j个字符替换成串s1而产生串s4-----------\n"); printf("----------------h.提取串s的第i个字符开始的j个字符而产生串s5----------------\n"); printf("----------------i.将串s1和串s2连接起来而产生串s6 ----------------\n"); printf("----------------j.求子串s1在s中位置----------------\n"); i=getch(); return i; } void main() { char s[255],s1[255]; cout<<"请输入串s:"<<endl; cin>>s; cout<<"请输入串s1:"<<endl; cin>>s1; while(1) { char model=menu(); switch(model) { output(s); break; case 'b': output(s1); break; case 'c': length(s); break; case 'd': length(s1); break; case 'e': cout<<"请输入插入位置i:"<<endl; int i; cin>>i; Insert(s,i,s1); break; case 'f': cout<<"请输入插入位置i:"<<endl; int a; cin>>a; cout<<"请输入删除字符数j:"<<endl; int j; cin>>j; del(s,a,j); break; case 'g': cout<<"请输入插入位置i:"<<endl; int b; cin>>b; cout<<"请输入替换字符数j:"<<endl; int c; cin>>c; replace(s,b,c,s1); break; case 'h': cout<<"请输入开始位置i:"<<endl; int d; cin>>d; cout<<"请输入提取字符数j:"<<endl; int e; cin>>e; substr(s,d,e); break; case 'i': cout<<"请输入生成串2时插入的位置i"<<endl; int f; cin>>f; contact(s,f,s1); break; case 'j': index(s,s1); break; } } } 现在的问题就是不管我字符串输入的是什么,输出和计算长度的函数总是显示“该串为空请重新输入”。 是数组的内容没办法传入吗?我尝试过把算长度的函数改到主函数里面来,但是还是不行,所以是数组的内容没有更新? C++菜鸟,可能很多问题都很幼稚,求各位不吝指教!谢谢!
C++ 用函数实现功能:字符串连接
#include <iostream> using namespace std; char *my_strcat(char *str1,char *str2) { char *p = str1; while( *p != '\0' ) {p++;} *p = *str2; do { str2++; p++; *p = *str2; } while( *str2 != '\0' ); return( str1 ); } int main() {char str1[6],str2[6]; cout<<"input str1"<<endl; cin>>str1; cout<<"input str2"<<endl; cin>>str2; cout<<my_strcat(str1,str2)<<endl; } 请教下函数为什么能实现那个功能,返回值是str1?str2怎么连接到它后面了
用boost库中的正则表达式匹配函数regex_match(),字符串长一点,匹配失败会出现异常
使用用boost库中的正则表达式匹配函数regex_match(),当字符串长一点,并且匹配失败时会出现异常。 如果配匹的字符串短一点就没问题,这里用"RtkAudio64.exe" ``` #include "stdafx.h" #include <boost/regex.hpp> #include<string> #include<iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { string sz = "(\\w+)*a(\\w+)*.(\\w+)"; boost::regex reg(sz); bool r = boost::regex_match("RtkAudio64.exe", reg);//正则表达式匹配 cout << r; return 0; } ``` 如果匹配的字符串长一点,这里用"RtkServiceAudio64.exe",而且匹配失败,就会出错 ``` #include "stdafx.h" #include <boost/regex.hpp> #include<string> #include<iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { string sz = "(\\w+)*a(\\w+)*.(\\w+)"; boost::regex reg(sz); bool r = boost::regex_match("RtkServiceAudio64.exe", reg);//正则表达式匹配 cout << r; return 0; } ``` ![图片说明](https://img-ask.csdn.net/upload/201904/26/1556287110_283036.png) 这是为什么呢...求大家指点!
C++str类函数问题,求解!
1.题目 输入2个字符串,分别用 ```void str_cat(char*p1,char*p2);int str_cmp(char*p1,char*p2);int str_len(char*p1,char*p2)``` 输出2个字符串的比较结果,拼接字符串和其长度。 2.我的代码 ```#include<iostream>#include<cstring>using namespace std;void str_cat(char*p1,char*p2);int str_cmp(char*p1,char*p2);int str_len(char*p1,char*p2);int main(){const int s=20;char str1[s];char str2[s];cin.getline(str1,s);cin.getline(str2,s);char* p1,p2;p1=str1;p2=str2;str_cat(p1,p2);str_cmp(p1,p2);str_len(p1);}void str_cat(char*p1,char*p2){cout<<strcat(p1,p2);}int str_cmp(char*p1,char*p2){cout<<strcmp(p1,p2);return 0;}int str_len(char*p){return strlen(p);} ``` 请问我错在那些地方,麻烦给我写出来,万分感谢!!!!!!!!!!!!!!!!!!!!!!!!!**要求运行后显示 1.两个字符串比较后的结果 2.拼接后的字符串 3.其长度**
求助大神,一道题简单的题希望帮忙改改
6-3 函数重载实现两数相加 (15分) 设计一个重载函数add,该函数有两个参数,可以实现两个类型相同的参数相加的操作,函数返回相加的结果。两个参数可以是整数、实数和字符串,但必须保证两个参数类型相同。 裁判测试程序样例: #include <iostream> #include <string> #include <iomanip> using namespace std; /* 请在这里填写答案 */ int main() { int a, b; double c, d; string s1, s2; cin >> a >> b; cin >> c >> d; cin >> s1 >> s2; cout << add(a, b) << endl; cout << fixed << setprecision(2) << add(c, d) << endl; cout << add(s1, s2) << endl; 输入样例: 3 5 3.3333 5.555555 hello world 输出样例: 8 8.89 helloworld 字符串的add函数不大懂 char add(char *s1,char *s2) { return strcat(s1,s2); }
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
【JSON解析】浅谈JSONObject的使用
简介 在程序开发过程中,在参数传递,函数返回值等方面,越来越多的使用JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,同时也易于机器解析和生成、易于理解、阅读和撰写,而且Json采用完全独立于语言的文本格式,这使得Json成为理想的数据交换语言。 JSON建构于两种结构: “名称/值”对的集合(A Collection of name/va...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
只因接了一个电话,程序员被骗 30 万!
今天想给大家说一个刚刚发生在我身边的一起真实的诈骗经历,我的朋友因此被骗走30万。注:为了保护当事人隐私,部分情节进行了修改。1平安夜突来的电话开始以为就像普通的诈骗一样,想办法让你把钱...
我一个37岁的程序员朋友
周末了,人一旦没有点事情干,心里就瞎想,而且跟几个老男人坐在一起,更容易瞎想,我自己现在也是 30 岁了,也是无时无刻在担心自己的职业生涯,担心丢掉工作没有收入,担心身体机能下降,担心突...
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me for a ...
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
Java 14 都快来了,为什么还有这么多人固守Java 8?
从Java 9开始,Java版本的发布就让人眼花缭乱了。每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份,...
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
立即提问