Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Siruri de caractere  (Citit de 3046 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Fayed
Client obisnuit
**

Karma: -24
Deconectat Deconectat

Mesaje: 62



Vezi Profilul
« : Martie 01, 2012, 20:51:37 »

Buna, am si eu o problema. Nu stiu cum sa citesc o matrice de caractere. Adica vreau ca pe fiecare linie a matricii sa citesc unul sau mai multe cuvinte. Am incercat sa fac asta dar nu imi afiseaza nimic dupa aia, deci este prost. Va rog daca puteti dati-mi o secventa de cod unde pe fiecare linie a matricii citesc caractere.
Codul sa fie in C/C++.
Memorat
psycho21r
Client obisnuit
**

Karma: -15
Deconectat Deconectat

Mesaje: 74



Vezi Profilul
« Răspunde #1 : Martie 01, 2012, 20:56:30 »

Depinde dacă acele caractere au sau nu spații între ele.
Memorat
Fayed
Client obisnuit
**

Karma: -24
Deconectat Deconectat

Mesaje: 62



Vezi Profilul
« Răspunde #2 : Martie 01, 2012, 22:20:53 »

Caracterele pot fi in orice fel(cu spatiu, fara spatiu,semne precum '!,?.') Pot fi propozitii intregi.
Memorat
tzipleatud
De-al casei
***

Karma: 104
Deconectat Deconectat

Mesaje: 117



Vezi Profilul
« Răspunde #3 : Martie 01, 2012, 23:16:03 »

Sa zicem ca ai de citit o matrice cu N linii, iar S[j] reprezinta linia j din matrice. Atunci o sa ai ceva in genul:
Pentru citirea cu streamuri:
Cod:
for (j=1;j<=N;j++)
    getline(fin,S[j]);

Unde "fin" e fisierul de intrare.

Pentru citirea folosind biblioteca <cstdio>:
Cod:
for (j=1;j<=N;j++)
     gets(S[j]);


Memorat
Fayed
Client obisnuit
**

Karma: -24
Deconectat Deconectat

Mesaje: 62



Vezi Profilul
« Răspunde #4 : Martie 02, 2012, 11:16:50 »

In primul rand citirea pe care tu ai propus-o se face cu tipul string. Dar nu asta e o problema. Problema este ca programul da eroare la compilare. Si mam mai gandit la o problema:  la afisare de unde stiu pana unde il incrementez pe 'j' ?  deoarece nu stiu lungimea fiecare linii. Ma gandeam sa mai folosesc o matrice care sa retina lungimile dar mi se pare prea costisitor. Daca aveti idei mai bune nu ezitati sa imi spuneti.
Asta e ceea ce am lucrat pana acum:

Cod:
#include<fstream>
#include<cstring>
#include<string>
using namespace std;

  int n,m;
  string M[20][100];
char S[20][300];
int V[7];
ifstream f("culori.in");
ofstream g("culori.out");

int main()
{
f>>n;
for(int j=1;j<=n;j++)
 {
    getline(f,M[j]);
 }

f.close();
g.close();
return 0;

}

Editat de moderator: Foloseste tagul code atunci cand postezi cod.
« Ultima modificare: Martie 02, 2012, 11:21:04 de către Cezar Mocan » Memorat
popoiu.george
Vorbaret
****

Karma: 19
Deconectat Deconectat

Mesaje: 162



Vezi Profilul
« Răspunde #5 : Martie 02, 2012, 11:56:09 »

Cod:
#include<stdio.h>
using namespace std;

char M[100][100];

int main() {
    freopen("intrare.in", "r", stdin);
    freopen("iesire.out", "w", stdout);

    int i=0;
    while( gets(M[i])!=NULL ) i++;

    return 0;
}

gets citeste pana intalneste '\n' pe linie, si returneaza NULL cand ajunge la sfarsitul fisierului.
Memorat
caen1
Client obisnuit
**

Karma: 22
Deconectat Deconectat

Mesaje: 75



Vezi Profilul
« Răspunde #6 : Martie 02, 2012, 12:12:30 »

In sursa ta, nu trebuie sa declari o matrice de string-uri, ci un vector de string-uri. Iar dupa ce ai citit numarul de linii, iti mai ramane un caracter (newline) pe care nu vrei sa-l bagi in matrice, dar care ar fi prima linie citita daca nu scapi de ea. Si scapi de ea citind un caracter nou, dupa ce ai citit n-ul. Incearca sa faci modificarile astea si vezi ce-ti iese. Si nu uita sa faci si afisarea dupa.
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines