para - read a string in c++
Cómo cin space en c++? (8)
Digamos que tenemos un código:
int main()
{
char a[10];
for(int i = 0; i < 10; i++)
{
cin>>a[i];
if(a[i] == '' '')
cout<<"It is a space!!!"<<endl;
}
return 0;
}
¿Cómo se hace un símbolo de espacio desde la entrada estándar? Si escribe espacio, el programa ignora! :( ¿Hay alguna combinación de símbolos (por ejemplo, ''/ s'' o algo así) que signifique "Espacio" que pueda usar de la entrada estándar para mi código?
Al utilizar el operador cin >>, se eliminarán los espacios en blanco iniciales y se detendrá la entrada en el primer espacio en blanco al final. Para tomar una línea completa de entrada, incluidos los espacios, prueba cin.getline()
. Para tomar un personaje a la vez, puedes usar cin.get()
.
Para ingresar UNA LÍNEA COMPLETA que contiene muchos espacios, puede usar getline(cin,string_variable);
p.ej:
string input;
getline(cin, input);
Este formato captura todos los espacios en la oración hasta que se presiona return
Pensé que compartiría la respuesta que funcionó para mí. La línea anterior terminó en una nueva línea, por lo que la mayoría de estas respuestas por sí mismas no funcionaron. Esto hizo:
string title;
do {
getline(cin, title);
} while (title.length() < 2);
Eso suponía que la entrada siempre tiene al menos 2 caracteres de longitud, lo que funcionó para mi situación. También puede intentar simplemente compararlo con la cadena "/n"
.
Prueba esto en las cuatro direcciones para obtener información con espacio :)
#include<iostream>
#include<stdio.h>
using namespace std;
void dinput(char *a)
{
for(int i=0;; i++)
{
cin >> noskipws >> a[i];
if(a[i]==''/n'')
{
a[i]=''/0'';
break;
}
}
}
void input(char *a)
{
//cout<<"/nInput string: ";
for(int i=0;; i++)
{
*(a+i*sizeof(char))=getchar();
if(*(a+i*sizeof(char))==''/n'')
{
*(a+i*sizeof(char))=''/0'';
break;
}
}
}
int main()
{
char a[20];
cout<<"/n1st method/n";
input(a);
cout<<a;
cout<<"/n2nd method/n";
cin.get(a,10);
cout<<a;
cout<<"/n3rd method/n";
cin.sync();
cin.getline(a,sizeof(a));
cout<<a;
cout<<"/n4th method/n";
dinput(a);
cout<<a;
return 0;
}
Se salta todos los espacios en blanco (espacios, pestañas, nuevas líneas, etc.) de forma predeterminada. Puede cambiar su comportamiento o utilizar un mecanismo ligeramente diferente. Para cambiar su comportamiento, use el manipulador noskipws
, de la siguiente manera:
cin >> noskipws >> a[i];
Pero, dado que parece que quiere ver los caracteres individuales, le sugiero que use get
, así antes de su loop
cin.get( a, n );
Nota: get
dejará de recuperar caracteres de la transmisión si encuentra una nueva línea char ( /n
) o después de n-1 caracteres. Se detiene antes de tiempo para que pueda agregar el carácter nulo ( /0
) a la matriz. Puede leer más sobre la interfaz istream
here .
Tengo el mismo problema y acabo de usar cin.getline(input,300);
.
noskipws
y cin.get()
veces no son fáciles de usar. Como tienes el tamaño correcto de tu matriz, intenta usar cin.getline()
que no se preocupa por ningún carácter y lee toda la línea en el recuento de caracteres especificado.
Use cin.get()
para leer el siguiente caracter.
Sin embargo, para este problema, es muy ineficiente leer un personaje a la vez. Use istream::read()
lugar.
int main()
{
char a[10];
cin.read(a, sizeof(a));
for(int i = 0; i < 10; i++)
{
if(a[i] == '' '')
cout<<"It is a space!!!"<<<endl;
}
return 0;
}
Y use ==
para verificar la igualdad, no =
.
#include <iostream>
#include <string>
int main()
{
std::string a;
std::getline(std::cin,a);
for(std::string::size_type i = 0; i < a.size(); ++i)
{
if(a[i] == '' '')
std::cout<<"It is a space!!!"<<std::endl;
}
return 0;
}