C++ 菜单C/C+中的字符串和数组+;

C++ 菜单C/C+中的字符串和数组+;,c++,C++,我在打印菜单的案例3时遇到问题,因为这是一个涉及字符串和char的问题,而其他案例可以很好地处理向量,我如何解决这个问题 #include <windows.h> //Lots of useful things #include <iostream> //"cout" and "cin" #include <conio.h> //"getch()" and "kbhit()" #include <string> //Strings, obvious

我在打印菜单的案例3时遇到问题,因为这是一个涉及字符串和char的问题,而其他案例可以很好地处理向量,我如何解决这个问题

#include <windows.h> //Lots of useful things
#include <iostream> //"cout" and "cin"
#include <conio.h> //"getch()" and "kbhit()"
#include <string> //Strings, obviously
#include <ctime> //Is needed in most compilers for the rand() seeds
#include <stdio.h>
#include <stdlib.h>

using namespace std; //I hate using std:: before every cout or string

int main(int argc, char** argv) {

    int option;
    int arr[10], sum, i, j, n, c,k,l;
    char cadena;
    char *ptrcad;
    int num, c1,d1,a[100],b[100];

    cout<<" MENU DE OPCIONES: "<<endl<<endl;
    cout<<" 1. Calcular la suma de todos los elementos de un vector"<<endl;
    cout<<" 2. Indicar si un valor num se encuentra en un vector"<<endl;
    cout<<" 3. Invertir una cadena apuntada"<<endl;
    cout<<" 4. Invertir los elementos de un vector vec de N posiciones"<<endl;
    cout<<" 5. Informar Ia posicion donde aparece por ultima vez un valor"<<endl;
    cout<<" 6. Determinar si dos vectores son iguales"<<endl;
    cout<<" 7. Eliminar de una lista encadenada apuntada por cad todas la apariciones"<<endl;
    cout<<" 8. Elabore una rutina recursiva que imprima los elementos de una lista encadenada"<<endl;
    cout<<" 9. Elaborar una rutina recursiva que permita ordenar un vector de forma ascendente"<<endl;
    cout<<" 10. Salir"<<endl<<endl;
    cout<<" ELIJA UNA OPCION: ";
    cin>>option;

    system("cls");//Clear the screen and start the second part of the code

    switch(option){
    case 1:
        sum=0;
        for(i=0;i<10;i++){
            cout<<"Ingrese dato: ";
            cin>>arr[i];
            sum+=arr[i];
        }
        cout<<"\n Datos almacenados dentro del arreglo: "<<endl;
        for(j=0; j<10;j++){
            cout<<"  "<<arr[j]<<"    ";
        }
        cout<<"\n\n La suma total es = "<<sum<<endl;
        break;
    case 2:
        c=0;
        for(i=0;i<10;i++){
            cout<<"Ingrese dato: ";
            cin>>arr[i];
        }
        cout<<"\n Datos almacenados dentro del arreglo: "<<endl;
        for(j=0; j<10;j++){
            cout<<"  "<<arr[j]<<"    ";
        }
        cout<<"\n\n Ingrese el dato a verificar: ";
        cin>>n;
        for(i=0;i<10;i++){
            if(n==arr[i]){
                cout<<"El elemento "<<n<<" se encuentra en el arreglo en la posicion "<<i<<endl;}
            else{
                c++;}
         }
         if(c++==10){
         cout<<"El elemento "<<n<<" no se encuentra en el arreglo"<<endl;}
        break;
     case 3:
        char cad[20];
        char *ptrcad; //puntero que apunta a mi cadena
        cout<<"Ingrese la cadena: "<<endl;
        gets(cad);
        cout<<cad;
        for(int i=5;i>=0;i--){
            ptrcad=&cad[i];//asigno puntero, ptr cad apunta al contenido de cad
            cout<<*ptrcad;
            }
        break;
    case 4:
        cout<<"Ingrese numero de elementos del arreglo: ";
        cin>>num;
        for(i=0;i<num;i++){
            cout<<"Ingrese dato: ";
            cin>>arr[i];
        }
        cout<<"\n Datos almacenados dentro del arreglo: "<<endl;
        for(j=0; j<num;j++){
            cout<<"  "<<arr[j]<<"    ";
        }
        for (int i=0; i<num/2; i++){
        int temp=arr[i];
        arr[i]=arr[num-1-i];
        arr[num-1-i]=temp; }
        cout<<"\n El arreglo invertido es: "<<endl;
        for (int i=0; i<num; i++){
            cout<<"  "<<arr[i]<<"    "; }
        break;
    case 5:
        break;
    case 6:
        int v1[5],v2[5], ban;
        ban=0;
        for(i=0;i<5;i++){
            cout<<"Ingrese dato vector 1: ";
            cin>>v1[i];
        }
        cout<<"\n Datos almacenados dentro del arreglo 1: "<<endl<<endl;
        for(j=0; j<5;j++){
            cout<<"  "<<v1[j]<<"    ";
        }
                for(i=0;i<5;i++){
            cout<<"Ingrese dato vector 2: ";
            cin>>v2[i];
        }
        cout<<"\n Datos almacenados dentro del arreglo 2: "<<endl<<endl;
        for(j=0; j<5;j++){
            cout<<"  "<<v2[j]<<"    ";
        }
        for(i=0;i<5;i++)
        if(v1[i]==v2[i])
        ban++;
        if(ban==5)
        cout<<"\nLos vectores son iguales"<<endl;
        else
        cout<<"\nLos vectores no son iguales"<<endl;
        break;
    case 7:
        break;
    case 8:
        break;
    case 9:
        int a[5], aux;
        for(i=0;i<5;i++){
            cout<<"Ingrese dato vector 1: ";
            cin>>a[i];
        }
        cout<<"\n Datos almacenados dentro del arreglo 1: "<<endl<<endl;
        for(j=0; j<5;j++){
            cout<<"  "<<a[j]<<"    ";
        }
         for(i=0; i<=5;i++)
            for(l=i+1; l<=5;l++)
            if(a[i]>=a[l])
            {
                aux=a[l];
                a[l]=a[i];
                a[i]=aux;
            }
            cout<<"El vector ordenado es: ";
            for(i=0;i<=5;i++)
            cout<<a[i]<<"  ";
        break;
    case 10:
        exit(0);
    default: cout<<"Opcion no valida";
    }

    return 0;
}
#包括//许多有用的东西
#包括//“cout”和“cin”
#包括//“getch()”和“kbhit()”
#显然,包括//字符串
#对于rand()种子,大多数编译器都需要include/
#包括
#包括
使用名称空间std//我讨厌在每个cout或string之前使用std::
int main(int argc,字符**argv){
int选项;
int arr[10],和,i,j,n,c,k,l;
卡尔卡德纳;
char*ptrcad;
整数,c1,d1,a[100],b[100];
从你的评论中可以看出


在案例3中,我必须使用指针反向打印字符串,我的错误是在控制台中我无法写入任何内容,程序只是退出

我看不出你的程序有任何问题。它在对你指定的
选项执行操作后按预期退出。如果你想让它继续接受选项,你需要有某种循环
例如

此外,通常不建议使用它来读取
stdin

请注意,gets与fgets完全不同:gets不仅使用stdin作为源,而且在结果字符串中不包含结尾的换行符,并且不允许指定str的最大大小(这可能导致缓冲区溢出)


[P>实际上,微软C++编译器如果使用它会引发一个错误。建议使用<代码> CIN < /C>或<代码> FGES。

你已经包含了字符串头,为什么不使用它的内容?我打赌很多错误就这样消失了。你得到什么错误?在3的情况下,什么是试图实现的?打印用户输入了6个字符,在反向中?案例3我必须使用指针反向打印字符串,我的错误是在控制台中我不能写任何东西,程序只是退出
while(true)
{
     switch(option)
     {
           case 0:
               // actions
           break;
           ....
           case 10:
               exit(0);
     }
}