Problema Caesar's cipher
Last Updated: Mar 07 2022 20:50, Started by
andreixdebu
, Feb 23 2022 22:53
·
0
#1
Posted 23 February 2022 - 22:53
Salut again, am o problema de rezolvat, va las enuntul mai jos, am incercat sa o rezolv dar am o eroare care imi zice "expression must have pointer-to-object but it has type int" (mai exact e o problema la s[i]) si nu inteleg cum se poate rezolva (lucrez in C de o zi deci nu aruncati cu hate). Am sa pun mai jos enuntul si ce am incercat.
#include <stdio.h> #include <stdlib.h> // Substitution cipher or Caesar’s cipher. // This program which reads a natural number n and a string s. The string s is encoded using Caesar’s cipher with a displacement of n (either positive or negative). // The program decodes the message and display it on the screen. Punctuation marks and numbers are left as they are. int main() { char s, ch; int n, i; scanf("%s", s); scanf("%d", n); for (i = 0; s[i] != "\0"; i++) { ch = s[i]; if (ch >= "a" && ch <= "z") { ch = ch - n; if (ch < "a") ch = ch + "z" - "a" + 1; s[i] = ch; } else if (ch >= "A" && ch <= "Z") { ch = ch - n; if (ch < "A") ch = ch + "Z" - "A" + 1; s[i] = ch; } } printf("Decrypted message: %s", s); return 0; } |
#2
Posted 23 February 2022 - 23:19
Quote
ch = ch - n; Aici scazi un int dintr-un char. Trebuie sa convertesti char in codul ASCII respectiv, apoi scazi n si convertesti inapoi din codul ASCII obtinut intr-un caracter. |
#3
Posted 23 February 2022 - 23:30
LukRo, on 23 februarie 2022 - 23:19, said:
Aici scazi un int dintr-un char. Trebuie sa convertesti char in codul ASCII respectiv, apoi scazi n si convertesti inapoi din codul ASCII obtinut intr-un caracter. Nu afecteaza asta. Charul ala tot codul ascii il are in spate. andreixdebu, on 23 februarie 2022 - 22:53, said:
(mai exact e o problema la s[i]) si nu inteleg cum se poate rezolva (lucrez in C de o zi deci nu aruncati cu hate). Tu ai declarat s ca un tip primitiv (char) si incerci sa il folosesti ca si array. Si mai ai o problema cand folosesti un caracter (gen 'a' / 'z' / etc). Trebuie cu apostrof ('), nu ghilimele (") .. astea din urma sunt un array de caractere. Edited by sftpdt, 23 February 2022 - 23:33. |
#4
Posted 23 February 2022 - 23:36
#5
Posted 24 February 2022 - 00:10
char-ul ala trebuie sa tina un cod undeva. ASCII e cel mai frecvent (erau si altele pe vremuri pe altfel de sisteme).
|
#6
Posted 24 February 2022 - 09:20
Atentie si la scanf. Amarata aia de functie trebuie sa primeasca adrese de memorie unde sa stocheze ca citeste de la tastatura. Nu intra in detalii acum, dar retine informatia.
char s[100], ch; // deja ti s-a spus ce nu era ok cu definitia lui s. pt inceput, codul asta e ok-ish. mai tarziu o sa mai trebuiasca sa citesti despre buffer overflow int n, i; scanf("%s", s); // s reprezinta adresa de inceput a "sirului" scanf("%d", &n); // &n inseamna adresa unde este stocata variabila n Edited by Cy_Cristian, 24 February 2022 - 09:20. |
#7
Posted 06 March 2022 - 19:42
Salut, am o problema cu un cod, imi merge la cuvinte normale, dar daca introduc o propozitie, ia doar pana la primul spatiu si imi da un output foarte aiurea, daca ma puteti ajuta sa identific problema, va postez codul meu mai jos si un exemplu la ceea ce imi afiseaza.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> // Substitution cipher or Caesar’s cipher. // This program which reads a natural number n and a string s. The string s is encoded using Caesar’s cipher with a displacement of n (either positive or negative). // The program decodes the message and display it on the screen. Punctuation marks and numbers are left as they are. int main() { int i, key; char a[500]; scanf("%[^\n]s", a); scanf("%d", &key); while (a[i] != '\0') { if (a[i] >= 'a' && a[i] <= 'z') a[i] = a[i] - key; else if (a[i] >= 'A' && a[i] <= 'Z') a[i] = a[i] - key; i++; } printf("%s", a); return 0; } |
#8
Posted 06 March 2022 - 19:52
problema este ca 'a' minus key este mai mic decat 'z' dar si mai mic decat 'a',
|
#9
Posted 07 March 2022 - 14:17
Nvm, am rezolvat, problema era ca nu am initializat int i = 0, acuma merge, mersi mult tuturor care au incercat sa ma ajute!
|
#10
Posted 07 March 2022 - 20:50
uita-te la ce ti-am spus eu
output-ul ala aiurea nu de la initializare [ https://www.youtube-nocookie.com/embed/M7fV-eQwxrY?feature=oembed - Pentru incarcare in pagina (embed) Click aici ] faptul ca merge nu inseamna ca ai rezolvat |
|
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users