Wytłumaczy ktoś jak wypisywać tekst z klawiatury w c?
I jak z takiego wczytanego tekstu wyświetlić liczbę naciśnięć na klawiaturze telefonu z literami?
Po pierwsze jak wczytać tekst z klawiatury ?
Bo pisałam coś takiego
#include <stdio.h>
int main()
{
char tekst[160];
scanf("%159s",&tekst);
printf(tekst);
return 0;
}
Wpisałam ala ma kota , wyświetliło tylko ala
Chce żeby mi wypisało liczbę naciśnięć każdego klawisza
powinno wyjść:
[2]-4
[5]-5
[6]-4
[9]-1
[0]-2
Z klawiatury takiej jak była kiedys przy telefonach z klawiszami
1
2 abc
3 def
4ghi
5 jkl
6 mno
7 prqs
8 tuv
9 wxyz
*
0 SP
#include <iostream>
int main()
{
std::string text;
std::getline(std::cin,text);
std::cout<<text<<std::endl;
}
teraz wystarczy przeiterować po stringu i dopisać odpowiednią funkcję do zliczania naciśnięć
a jak to ma zliczać?
Możesz skorzystać
- Ze zwykłej tablicy
int znaki[128]
i zwiększać tę komórkę, której indeks jest liczbową reprezentacją znaku. Albo... - Użyć kontenera
std::map<char, int>
z#include <map>
no i technika wykonania… PRAWIE ta sama ;)
Chociażby tak..
Nie jest to dokończone bo trzeba dopisać tych case'ów aż do 'z' + dodać zliczanie tych samych cyfr np dla 2 , 3, 4 i dodawać kliknięcia
#include <stdio.h>
#include <string.h>
struct number {
char c;
int key;
int clicks_number;
};
int main()
{
char text[] = "abacaba";
int size = strlen(text);
struct number clicks[size];
for(int i=0;i<size;++i)
{
switch(text[i])
{
case 'a':
clicks[i].c = 'a';
clicks[i].key = 2;
clicks[i].clicks_number = 1;
break;
case 'b':
clicks[i].c = 'b';
clicks[i].key = 2;
clicks[i].clicks_number = 2;
break;
case 'c':
clicks[i].c = 'c';
clicks[i].key = 2;
clicks[i].clicks_number = 3;
break;
}
}
for(int i=0;i<size;i++)
{
printf("[%d]-", clicks[i].key);
printf("%d\n", clicks[i].clicks_number);
}
}
#include <stdio.h>
#include <string.h>
struct number {
char c;
int key;
int clicks_number;
};
int main()
{
int text;
scanf("%d",&text);
int size = strlen(text);
struct number clicks[size];
for(int i=0;i<size-1;++i)
{
switch(text)
{
case ' ':
clicks[i].c = ' ';
clicks[i].key = 0;
clicks[i].clicks_number = 1;
break;
case 'a':
clicks[i].c = 'a';
clicks[i].key = 2;
clicks[i].clicks_number = 1;
break;
case 'b':
clicks[i].c = 'b';
clicks[i].key = 2;
clicks[i].clicks_number = 2;
break;
case 'c':
clicks[i].c = 'c';
clicks[i].key = 2;
clicks[i].clicks_number = 3;
break;
case 'd':
clicks[i].c = 'd';
clicks[i].key = 3;
clicks[i].clicks_number = 1;
break;
case 'e':
clicks[i].c = 'e';
clicks[i].key = 3;
clicks[i].clicks_number = 2;
break;
case 'f':
clicks[i].c = 'f';
clicks[i].key = 3;
clicks[i].clicks_number = 3;
break;
case 'g':
clicks[i].c = 'g';
clicks[i].key = 4;
clicks[i].clicks_number = 1;
break;
case 'h':
clicks[i].c = 'h';
clicks[i].key = 4;
clicks[i].clicks_number = 2;
break;
case 'i':
clicks[i].c = 'i';
clicks[i].key = 4;
clicks[i].clicks_number = 3;
break;
case 'j':
clicks[i].c = 'j';
clicks[i].key = 5;
clicks[i].clicks_number = 1;
break;
case 'k':
clicks[i].c = 'k';
clicks[i].key = 5;
clicks[i].clicks_number = 2;
break;
case 'l':
clicks[i].c = 'l';
clicks[i].key = 5;
clicks[i].clicks_number = 3;
break;
case 'm':
clicks[i].c = 'm';
clicks[i].key = 6;
clicks[i].clicks_number = 1;
break;
case 'n':
clicks[i].c = 'n';
clicks[i].key = 6;
clicks[i].clicks_number = 2;
break;
case 'o':
clicks[i].c = 'o';
clicks[i].key = 6;
clicks[i].clicks_number = 3;
break;
case 'p':
clicks[i].c = 'p';
clicks[i].key = 7;
clicks[i].clicks_number = 1;
break;
case 'q':
clicks[i].c = 'q';
clicks[i].key = 7;
clicks[i].clicks_number = 2;
break;
case 'r':
clicks[i].c = 'r';
clicks[i].key = 7;
clicks[i].clicks_number = 3;
break;
case 's':
clicks[i].c = 's';
clicks[i].key = 7;
clicks[i].clicks_number = 4;
break;
case 't':
clicks[i].c = 't';
clicks[i].key = 8;
clicks[i].clicks_number = 1;
break;
case 'u':
clicks[i].c = 'u';
clicks[i].key = 8;
clicks[i].clicks_number = 2;
break;
case 'v':
clicks[i].c = 'v';
clicks[i].key = 8;
clicks[i].clicks_number = 3;
break;
case 'w':
clicks[i].c = 'w';
clicks[i].key = 9;
clicks[i].clicks_number = 1;
break;
case 'x':
clicks[i].c = 'x';
clicks[i].key = 9;
clicks[i].clicks_number = 2;
break;
case 'y':
clicks[i].c = 'y';
clicks[i].key = 9;
clicks[i].clicks_number = 3;
break;
case 'z':
clicks[i].c = 'z';
clicks[i].key = 9;
clicks[i].clicks_number = 4;
break;
case '*':
clicks[i].c = '*';
clicks[i].key = '*';
clicks[i].clicks_number = 1;
break;
case '#':
clicks[i].c = '#';
clicks[i].key = '#';
clicks[i].clicks_number = 1;
break;
}
}
for(int i=0;i<size-1;i++)
{
printf("[%d]-", clicks[i].key);
printf("%d\n", clicks[i].clicks_number);
}
}
i jak wpisze ala ma kota
to wyświetla sie
[-2]=1990....
[19901...]-421... i czemu bo jak dam text[i] to wyskakuje błąd
@Nency Black:
Przypomnij sobie różnicę pomiędzy int n = 56;
, char n[] = "56";
a char n = '5';
.
Zrób sobie dwie tablicę:
const struct number nbrs[] = {
{' ', '0', 1},
{'a', '2', 1},
{'b', '2', 2},
...
};
int clicks[128] = {};
I wtedy dla każdej litery w wejściowym ciągu:
- znajdź tą literę w
nbrs[]
porównując znbrs[].c
- ze znalezionego rekordu odczytaj
key
iclicks_number
- dodaj kliknięcia:
clicks[key]+=clicks_number;
Po tym wypisz indeksy (konwertując na char
) i wartości clicks
jeżeli clicks[index]!=0
.