将输入字符串转换为char数组

时间:2013-12-06 16:05:06

标签: c++ arrays string

我的问题是,我有一个从键盘获得的字符串,并希望将其保存到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

3 个答案:

答案 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;
}