https://coinmarketcap.com/exchanges/volume/24-hour/This site won't exactly tell you all the exchanges but most them listed here are old and you can trust it little bit. My recommendation would be use bittrex , poloniex and maybe hitbtc if you want.
And also which companies can accept cash for bitcoins?
I wouldn't recommend you sending cash directly because sometimes they screw up and you will lose your cash and not get your btc also.
What is better: buy by cash or by card?
Both have their disadvantages as i said cash transactions can't be reversed ans most of the trusted exchanges above don't accept cash directly. For credit card it is safer because of chargeback feature but the fees is as high as 20%. Either what you can do is register on
https://tether.to verify all your documents and address and send funds using your bank account. After funds arrived you can use it on the above exchanges without any more fees.
If you don't want to provide any documents just use local bitcoins you might find any local trader and it is more easier and safer to trade.
I just looking for the safest way to buy bitcoins. It's doesn't metter for me how. Is it okay that online exchanges require my street address and personal information (m/d/y of bith)? I would try to use bittrex and poloniex online.