Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cstring>
- using namespace std;
- /*
- 1. Sa se citeasca o propozitie de la tastatura. Sa se afiseze lungimea fiecarui cuvant.
- */
- void metodaGrea(char text[1024]) {
- int startCuv, endCuv;
- for (int i = 0; i < strlen(text); i++) {
- if (strchr(" .,", text[i]) == NULL) {
- startCuv = i;
- for (int j = i + 1; j < strlen(text); j++) {
- if (strchr(" .,", text[j]) != NULL) {
- endCuv = j;
- cout << endCuv - startCuv << " ";
- i = endCuv - 1;
- break;
- }
- if (j == strlen(text) - 1) {
- endCuv = j + 1;
- cout << endCuv - startCuv << " ";
- i = endCuv;
- }
- }
- }
- }
- }
- // de evidentiat ca in metoda simpla nu trebuie sa ne preocupam
- // cum este cuvantul in intreg textul si nu trebuie sa stim unde
- // incepe sau unde se termina
- void metodaUsoara(char text[1024]) {
- char *cuv = NULL; // de explicat putin pointerul
- cuv = strtok(text, " ,.");
- while (cuv != NULL) {
- cout << strlen(cuv) << " ";
- cuv = strtok(NULL, " ,.");
- }
- }
- /*
- 2. Sa se citeasca un text dintr-un fisier. Sa se transforme in fiecare cuvant de pe pozitie para
- literele de pe pozitii pare in litere mari. Asemanator pentru cuvinte de pe pozitii impare.
- salut, sunt un text -> SaLuT, sUnt Un tExT
- */
- void resizeLetters(char text[1024]) {
- char *cuv = NULL; // de explicat putin pointerul
- char oldText[1024];
- strcpy(oldText, text);
- cuv = strtok(text, " ,.");
- int wordCount = 1;
- while (cuv != NULL) {
- if (wordCount % 2 == 0) {
- for (int i = 0; i < strlen(cuv); i++) {
- if (i % 2 == 1) {
- cuv[i] -= 'a' - 'A';
- }
- }
- }
- else {
- for (int i = 0; i < strlen(cuv); i++) {
- if (i % 2 == 0) {
- cuv[i] -= 'a' - 'A';
- }
- }
- }
- cuv = strtok(NULL, " ,.");
- wordCount++;
- }
- // la inceput fara asta pentru a arata ca strtok pune \0 peste tot
- // acolo unde e litera neimportanta
- for (int i = 0; i < strlen(oldText); i++) {
- if (text[i] == '\0') {
- text[i] = oldText[i];
- }
- }
- }
- /*
- 3. Sa se citeasca un text de la tastatura. Sa se elimine din fiecare cuvant litere daca au peste
- 5 litere. Se vor elimina atatea cate trebuie pentru a ajunge la 5. Textele vor incepe cu o litera
- si vor avea la final un punct.
- propozitia aceasta are cuvinte lungi -> proia aceta are cuvte lungi
- */
- void removeLetters(char text[1024]) {
- char words[100][256];
- char *cuv = NULL;
- char textCopy[1024];
- strcpy(textCopy, text); // salvam o copie deoarece stricam text
- cuv = strtok(text, " ,.");
- int wordIndex = 0;
- while (cuv != NULL) {
- while (strlen(cuv) > 5) {
- for (int i = strlen(cuv) / 2; i < strlen(cuv); i++) {
- cuv[i] = cuv[i + 1];
- }
- }
- strcpy(words[wordIndex], cuv);
- cuv = strtok(NULL, " ,.");
- wordIndex++;
- } // daca mergem doar prin cuvinte, pierdem spatiile si semnele de punctuatie
- // nu putem face ca la ultima problema deoarece am pus \0 in plus cum am ster litere
- // asa ca ne salvam toate spatiile dintre cuvinte si semnele de punctuatie
- char seps[100][256];
- cuv = strtok(textCopy, "qwertyuiopasdfghjklzxcvbnm"); // lasam doar litere mici (citim doar litere mici)
- int sepIndex = 0;
- while (cuv != NULL) {
- strcpy(seps[sepIndex], cuv);
- cuv = strtok(NULL, "qwertyuiopasdfghjklzxcvbnm");
- sepIndex++;
- }
- char newText[1024];
- strcpy(newText, ""); // ne construim noul sir gol unde o sa punem rezultatul
- for (int i = 0; i < wordIndex; i++) {
- strcat(newText, words[i]);
- if (i < sepIndex)
- {
- strcat(newText, seps[i]);
- }
- }
- strcpy(text, newText);
- }
- int main() {
- /* main 1
- char text[1024];
- cin.getline(text, 1024);
- metodaGrea(text);
- cout << endl;
- metodaUsoara(text);
- */
- /* main 2
- char text[1024];
- ifstream fin("text.in");
- fin.getline(text, 1024);
- resizeLetters(text);
- cout << text;
- */
- char text[1024];
- cin.getline(text, 1024);
- removeLetters(text);
- cout << text;
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement