Mam tablicę char, której wartości po kolei wynoszą (0, 4, 7, 22, 25) tylko bez nawiasów. Jest jakaś funkcja albo sposób, żeby przepisać poszczególne liczby do drugiej tablicy?
no operator []. Czy co ty chcesz zrobić konwersje char => int?
Mam tablicę char, której wartości po kolei wynoszą (0, 4, 7, 22, 25) tylko bez nawiasów.
Pokaż to w formie kodu, bo ten opis nic nie mówi. char
przechowuje jeden znak, więc 22
nie może być przechowane.
Natomiast, gdyby to były wartości kodu ASCII, wartości spoza przedziału 32
- 126
, są znakami niedrukowalnymi.
W programie tworzę tablicę char przez cin.getline i założmy, że gdy wpisuję 1, 4, 5, 6 to chcę żeby przepisało same liczby do drugiej tablicy. Mógłbym użyć funkcji isdigit(), tylko że problem pojawia się gdy występują liczby dwucyfrowe
W tablicy są również przecinki i spacje
Daj przykładowe dane wejściowe i dane wyjściowe dla tego zestawu.
Wejście: 0, 5, 8, 24 czyli razem z przecinkami i spacjami
Wyjście: {0, 5, 8, 24} a tutaj same wartości
Czy posiadasz już jakieś próby kodu?
Zadeklaruj tablicę wartości liczbowych int nums[size]
.
ostringstream
do użycia, jako strumień danych z łańcucha.
Operatorem >>
wczytuj do tablicy liczb. Jeśli nie uda się wczytać, pomiń znak i znów wczytaj,
aż do odczytania wszystkich znaków.
Mój kod wygląda tak. Ogólnie program ma obliczać część wspólną kilku zbiorów, gdzie na wejściu zapisuję wzór w ONP typu {1, 4, 6, 10} {2, 4, 5, 6} *. Na razie program stworzył mi dwuwymiarową tablicę char gdzie wiersz przypada poszczególnemu zbiorowi między nawiasami klamrowymi
#include <iostream>
#include <conio.h>
#include <cstring>
#include <ctype.h>
using namespace std;
int main(){
int k=0, m=0;
int dlug[100], nums[100];
char tablica[100][100];
char wzor[100];
cout<<"Podaj wzor do rozwiazania: ";
cin.getline(wzor, 100); cout<<endl;
for(int i=0; i<100; i++){
a:
if(wzor[i]=='{'){
for(i; i<100; i++){
if(wzor[i+1]=='}'){
dlug[m]=k;
m++; k=0;
goto a;
}
tablica[m][k]=wzor[i+1];
k++;
}
}
}
for(int i=0; i<m; i++){
for(int j=0; j<dlug[i]; j++){
cout<<tablica[i][j];
}
cout<<endl;
}
getch();
return 0;
}
Mógłbyś łopatologicznie wytłumaczyć jak użyć ostringstream?
Przykład:
#include <iostream>
#include <sstream>
#include <vector>
int main()
{
const char* cstr = { "0, 5, 8, 24" };
std::istringstream iss{ cstr };
std::vector<int> nums;
int tmp;
while (!iss.eof())
{
if (iss >> tmp)
{
nums.push_back(tmp);
}
else
{
iss.clear();
iss.ignore();
}
}
for (auto const& num : nums)
{
std::cout << num << ' ';
}
std::cout << std::endl;
}
lub samo wypisanie bez kontenerowania danych:
#include <iostream>
#include <sstream>
int main()
{
const char* cstr = { "0, 5, 8, 24" };
std::istringstream iss{ cstr };
int tmp;
while (!iss.eof())
{
if (iss >> tmp)
{
std::cout << tmp << ' ';
}
else
{
iss.clear();
iss.ignore();
}
}
std::cout << std::endl;
}
http://en.cppreference.com/w/cpp/container/vector
http://en.cppreference.com/w/cpp/io/basic_istringstream
https://wandbox.org/permlink/r8PiOJA3Y4MdiwWl
Tablice dwuwymiarowe można załatwić w ten sposób.