Ir ao conteúdo

Posts recomendados

Postado
#include <iostream>
#include <string>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <stdlib.h>


using namespace std;
int x;
int main()
{

string str;
string s;
int num,pos,tam;
                cin >> num;

        for(int y=0;y<=num;y++){
            getline(cin,str);

            s+=str[0];
            for(int i=0,x=0;i<str.size();i++){
                if(str[i] == ' '){
                    pos=i;
                    s+=str[pos+1];

                }


            }
            cout <<s << endl;
            s = ' ';
        }


return 0;
}
adicionado 1 minuto depois
agora, Pedro Henrique Faria Teixe disse:

#include <iostream>
#include <string>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <stdlib.h>


using namespace std;
int x;
int main()
{

string str;
string s;
int num,pos,tam;
                cin >> num;

        for(int y=0;y<=num;y++){
            getline(cin,str);

            s+=str[0];
            for(int i=0,x=0;i<str.size();i++){
                if(str[i] == ' '){
                    pos=i;
                    s+=str[pos+1];

                }


            }
            cout <<s << endl;
            s = ' ';
        }


return 0;
}

Usa como exemplo essa string aqui para voce entender. "compete online design event rating"

adicionado 5 minutos depois

@Gustavo AndrettoO problema pode estar no final da linha quando eu declaro que a string é igual ao espaco para zerar e ela n concatenar com outra string, porém quando faco sem igualar a espaco também da o mesmo erro

 

adicionado 9 minutos depois

@Gustavo Andretto Conseguir manim, eu usei, s = "", ao invés de s = ' '; e deu certo.

  • Curtir 2
Postado
12 horas atrás, Jefferson Moreira disse:

scanf (" %d[^/s]", variavel);

 

Ele lê a string guarda e limpa o buffer

Acredito que isso não vai funcionar...

 

O modo que eu achei que gera resultados consistentes foi usar "%*[^\n]" em um scanf e logo em seguida usar "%*c" em outro scanf.

 

Lembrando que no scanf, %[ serve para capturar cadeias de caracteres/string, sendo que você indica um conjunto de caracteres entre os colchetes, ou seja %[0-9a-zA-Z] capturaria uma string contendo números e letras. Você também pode usar ^ no início do conjunto de caracteres para indicar um conjunto de caracteres que não devem ser capturados (ou seja, todos os caracteres que não forem iguais ao que vier após ^ são capturados), por exemplo %[^\n] captura qualquer caractere menos o caractere nova linha '\n'.

 

E * é usado para informar ao scanf que o que for capturado não será guardado em nenhuma variável, ou seja é apenas descartado.

 

Ficando assim:

#include <stdio.h>

void flush(){
    /*Descarta todos os caracteres se houver algum até 
      encontrar o caractare nova linha ´\n´, então só
      sobra o ´\n´ na entrada: */
    scanf("%*[^\n]"); 
    //E então descarta o caractere nova linha ´\n´:
    scanf("%*c");  
}

int main()
{
    int i;
    char c, d, e;
    
    /*Pode ser feito colocando o %*[^\n] dentro do scanf
      de captura: */
    scanf("%d%*[^\n]", &i);
    scanf("%*c");
    
    //Ou usando dois scanfs após capturar para descartar:
    scanf("%c", &c);
    scanf("%*[^\n]");
    scanf("%*c");
    
    /*Então podemos usar isto para criar uma função para
      limpar a stdin: */
    scanf("%c", &d);
    flush();
    
    scanf("%c", &e);
    flush();
    
    printf("\n%d \n%c \n%c \n%c \n", i, c, d, e);
    
    return 0;
} 

 

Só que juntar os 2 num único scanf não funciona:

scanf("%*[^\n]%*c"); //Não funciona p/ limpar a stdin

Pois o caractere nova linha fica sobrando na stdin.

  • Curtir 2
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...