|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
[C++] Funzione cancella stringa
Ho provato a fare questo esercizio:
ho due stringhe (come array di char) A={"CIAO"}; B={"AI"}. Devo eliminare in A ogni lettera presente in B e mettere la nuova parola in un nuovo array di char C. Ho pensato di controllare le lettere uguali con due for e di inserire asterischi al posto delle lettere uguali in A. poi successivamente vado a mettere nell array C solo le lettere diverse da asterisco. Dovrebbe stampare la stringa CO invece stampa COAI. cosa non va? CODICE Codice:
#include <iostream>
using namespace std;
void cancella(char A[], char B[], char C[]);
int main(){
char A[]={"CIAO"};
char B[]={"AI"};
char C[]={" "};
cancella(A,B,C);
for(int i=0; i<strlen(C); i++)
cout<<C[i]<<endl;
system("pause");
return 0;
}
void cancella(char A[], char B[], char C[]){
int n=0;
for(int i=0; i<strlen(A); i++){
for(int j=0; j<strlen(B); j++){
if(A[i]==B[j])
A[i]='*';
}
}
for(int k=0; k<strlen(A); k++){
if(A[k]!='*')
C[n++]=A[k];
}
}
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Quote:
Codice:
C O [ [ [ [ [ [ [ [ [ [ A I Codice:
char A[100] = {"CIAO"};
char C[100];
C'è un altro "errore": Codice:
C[n++] = A[k]; Codice:
C[n] = A[k]; ++n; Codice:
(++i) + (++i) Codice:
#include <iostream>
using namespace std;
void cancella(char A[], char B[], char C[]);
int main() {
char A[100] = {"CIAO"};
char B[100] = {"AI"};
char C[100] = {""};
cancella(A,B,C);
for(int i = 0; i < strlen(A); ++i) cout << A[i];
cout << "\nstrlen(A) = " << strlen(A) << endl;
for(int i = 0; i < strlen(B); ++i) cout << B[i];
cout << "\nstrlen(B) = " << strlen(A) << endl;
for(int i = 0; i < strlen(C); ++i) cout << C[i];
cout << "\nstrlen(C) = " << strlen(C) << endl;
system("pause");
return 0;
int i = 1;
int j = ++i + i++;
cout << endl << endl << j << endl << endl;
}
void cancella(char A[], char B[], char C[]) {
int n = 0;
for (int i = 0; i < strlen(A); ++i) {
for (int j = 0; j < strlen(B); ++j) {
if (A[i] == B[j]) A[i] = '*';
break;
}
}
for (int k = 0; k < strlen(A); ++k) {
if (A[k] != '*') {
C[n] = A[k];
++n;
}
}
}
Ultima modifica di vendettaaaaa : 22-01-2012 alle 10:15. |
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Quote:
Codice:
CI*O strlen(A)=4; AI strlen(B)=4 CIO strlen(C)=3 |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Non mi ricordo perchè ma dopo aver testato il codice ho aggiunto un break nel ciclo for che cancella le lettere di A, è quello il problema.
Ora ricordo, il break l'ho aggiunto qui direttamente nel post ma andrebbe nel blocco if che sta nel blocco for (j = 0...): Codice:
void cancella(char A[], char B[], char C[]) {
int n = 0;
for (int i = 0; i < strlen(A); ++i) {
for (int j = 0; j < strlen(B); ++j) {
if (A[i] == B[j]) {
A[i] = '*';
break;
}
}
}
Alternativamente si può fare così: Codice:
void cancella(char A[], char B[], char C[]) {
int n = 0;
for (int j = 0; j < strlen(B); ++j) {
for (int i = 0; i < strlen(A); ++i) {
if (B[j] == A[i]) A[i] = '*';
}
}
Ultima modifica di vendettaaaaa : 23-01-2012 alle 15:14. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:14.




















