菜单中的字符串和数组
Strings and Arrays in a menu 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, 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<<"nn 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<<"nn 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;
}
从您的评论
我看不出你的程序有什么问题。在为您指定的在情况3中,我必须使用指针反向打印字符串,我的错误是在控制台中我不能写任何东西,程序只是退出
option
执行操作后,它按预期退出。如果你想让它继续接受选项,你需要有某种循环如:while(true)
{
switch(option)
{
case 0:
// actions
break;
....
case 10:
exit(0);
}
}
另外,一般不建议使用gets
来读取stdin
请注意,gets与fgets有很大的不同:gets不仅使用stdin作为源,而且在结果字符串中不包括结束换行字符,并且不允许指定str的最大大小(这可能导致缓冲区溢出)。
实际上,如果你使用它,Microsoft c++编译器会抛出一个错误。建议使用cin
或fgets
相关文章:
- 使用 jsoncpp 解析 json 数组字符串
- C++ 对象数组字符串输入在控制台上不起作用
- 插入了 C++ 数组字符串数据,但在显示输出时不显示
- 无法区分 JSON 对象/数组/字符串
- 为什么数组(字符串类型)的大小是 24 字节,带有单个空格元素
- 如何使用数组字符串进行输入验证
- (C++) 打印字符数组字符串的单词时出现问题
- 使用Back_inserter从任何位置的输入字符中使用Back_inserter进行过滤数组字符串
- C 函数反转字符数组字符串
- 如何在 c++ 中创建数组(字符串 [] )的向量
- 如何返回数组字符串的指针
- char数组字符串混淆
- 如何从字符数组字符串中提取空格
- 是否可以将 Bitset<8> 的值复制到数组字符串而不转换它们?
- C++数组字符串函数
- 如何在函数中操作字符数组(字符串)的指针,该指针在C / C ++中作为参数传递
- visual将音频文件存储到数组/字符串流C++中
- c++在char数组(字符串)上将what替换为
- 将数组字符串转换为intger c++(初学者)
- 需要设置数组字符串长度,使其恰好为13