我的问题是,我有一个从键盘获得的字符串,并希望将其保存到char数组中。我得到阵列后,我想把它变成一个数字或类似的东西。
我尝试过很多东西,但它不起作用。到目前为止,这是我最好的解决方案:
string input_string;
char char_string[20];
cout << "type in some input text:$" << endl;
cin >> input_string;
strcpy(char_string, input_string.c_str());
for (int i = 0; i < 20 ; i++)
{
switch(char_string[i])
{
case 'a' : cout << "a" << endl; break;
case 'b' : cout << "b" << endl; break;
case 'c' : cout << "c" << endl; break;
case 'd' : cout << "d" << endl; break;
case 'e' : cout << "e" << endl; break;
case 'f' : cout << "f" << endl; break;
...
但是当我运行这段代码时,我会收到你不想要的东西。如果输入为random random
我明白了:
r
a
n
d
o
m
contain uavialba char
contain uavialba char
contain uavialba char
contain uavialba char
contain uavialba char
contain uavialba char
contain uavialba char
contain uavialba char
contain uavialba char
v
contain uavialba char
z
contain uavialba char
contain uavialba char
但我想要这个:
r
a
n
d
o
m
r
a
n
d
o
m
答案 0 :(得分:7)
问题出在这里
for (int i = 0; i < 20 ; i++)
您始终输出20个字符。当你到达字符串的末尾时,你应该停止输出。
for (int i = 0; char_string[i] != '\0' ; i++)
C样式字符串最后有一个'\0'
字符,你应该测试一下。
似乎另一个错误是你读了一个单词而不是一行。而不是这个
cin >> input_string;
试试这个
getline(cin, input_string);
getline
读取整行,>>
读取一个单词。
BTW有一种更简单的方法来编写for循环中的代码。您不需要切换,只需执行此操作
cout << char_string[i] << endl;
答案 1 :(得分:1)
您根本不需要char_string
。只是假装input_string
是一个char
的数组(毕竟 包含一个)。例如,input_string[7]
会为您提供char
。
for(char c : input_string)
{
switch(c)
{
case 'a' : cout << "a" << endl; break;
case 'b' : cout << "b" << endl; break;
...
答案 2 :(得分:1)
最好使用 std :: string 来编写不依赖于大小的内容。
//g++ -std=c++0x sample.cpp
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
string input_string;
cout << "type in some input text:$" << endl;
cin >> input_string;
for(auto c : input_string)
cout << c << endl;
for_each(input_string.begin(), input_string.end(), [](char c){ cout << c << endl; });
return 0;
}