注册 登录
编程论坛 C++教室

一个“字符串和指针相结合”的编程题,请高手赐教!

非己莫属 发布于 2012-05-11 17:29, 637 次点击
   要求:先用一个指针指向这个字符串"zhongyuan  da  jia  ting" 然后写一个程序
使得有一个指针数组,使这个指针数组的指针分别指向"zhongyuan"   "da"   "jia"   "ting",
也就是遇到字符串中的空格后,就将其存到另一个变量中,然后使指针数组中的指针指向变量,
完成后输出格式为  "zhongyuan"   "da"   "jia"   "ting"
希望高手写个完整程序出来,请赐教!
11 回复
#2
草狼2012-05-11 20:22
程序代码:

#include<iostream>
#include<sstream>
using namespace std;

int main()
{
    char *p = "zhongyuan  da  jia  ting";
    istringstream in(p);

    char str[5][10];
    int i=0;
    while( in >> str[i++] );

    for(int i=0; i<4; ++i)
        cout << str[i] <<endl;
    return 0;
}

#3
tongzhipeng2012-05-11 23:51
while(in>>str[i++])是什么意思?
#4
非己莫属2012-05-12 09:44
以下是引用草狼在2012-5-11 20:22:33的发言:

 
#include
#include
using namespace std;
 
int main()
{
    char *p = "zhongyuan  da  jia  ting";
    istringstream in(p);
 
    char str[5][10];
    int i=0;
    while( in >> str[i++] );
 
    for(int i=0; i<4; ++i)
        cout << str[i] <<endl;
return 0;
}
请问一下char str[5][10]; 是什么意思,为什么我把它换成一个一维数组比如str[4],却无法运行呢,请赐教

[ 本帖最后由 非己莫属 于 2012-5-12 11:08 编辑 ]
#5
liudw22012-05-12 11:02
while(in>>str[i++])改为while(cin >> str[i++])
#6
tongzhipeng2012-05-12 14:11
楼上。。。你想想这里用的到cin吗。。。。。我测试过的可以编译,运行结果无误,就是没见过 in>> 有用法,纠结中。。。
#7
海盗许毅2012-05-12 15:32
回复 6楼 tongzhipeng
那你见过cin>>的用法吧?
in是istringstream创建的一个对象而已,就和fin是ifstream的对象一样,这个名字可以自己随意起的。
它们的用法几乎和cin相同,就是关联的对象不同而已。
#8
非己莫属2012-05-13 17:51
请问一下char str[5][10]; 是什么意思,为什么我把它换成一个一维数组比如str[4],却无法运行呢,请赐教
 
#9
lz10919149992012-05-14 10:30
程序代码:
#include <iostream>
#include <vector>
#include <cstring>
#include <cctype>
using namespace std;
class SplitResult {
public:
    SplitResult(char** a = 0, int c = 0) : array(a), count(c) {}
    ~SplitResult();
    char** getArray() { return array; }
    int    getCount() { return count; }
private:
    char** array;
    int    count;
    friend SplitResult* split(const char*, SplitResult*);
};
SplitResult::~SplitResult()
{
    for (int i = 0; i < count; ++i)
        delete array[i];
    delete array;
}
SplitResult* split(const char*, SplitResult*);
int main()
{
    const char* str = "zhongyuan  da  jia  ting";
    SplitResult sr;
    int i;

    split(str, &sr);
    for (i = 0; i < sr.getCount(); ++i)
        cout << sr.getArray()[i] << " ";
}
SplitResult* split(const char* str, SplitResult* sr)
{
    const char* p = str;
    const char* start;
    char** array;
    char* tmp;
    int length;
    int i;
    vector<char*> v;

    while (*p) {
        if (isalpha(*p)) {
            start = p;
            length = 0;
            while (isalpha(*p))
                ++p, ++length;
            tmp = new char[length + 1];
            tmp[length] = '\0';
            v.push_back(strncpy(tmp, start, length));
        }
        ++p;
    }

    array = new char*[v.size()];
    for (i = 0; i < v.size(); ++i)
        array[i] = v[i];
    sr->array = array;
    sr->count = v.size();

    return sr;
}


[ 本帖最后由 lz1091914999 于 2012-5-14 10:33 编辑 ]
#10
liudw22012-05-15 21:15
给代码的时候请也标识上注释,谢谢!
#11
liudw22012-05-15 21:27
回复 8楼 非己莫属
因为指针数组的指针分别指向"zhongyuan"   "da"   "jia"   "ting",也就是说这四个字符串分别是一维数组,且字符串在C++中是需要加上“\0”的。例如:"zhongyuan\0"。
而且这是字符串,如果是str[4] = {"zhongyuan", "da", "jia", "ting"},那就是错误的,应该改为str[4] = {'zhongyuan', 'da', 'jia', 'ting'},那么这就只是字符而已
#12
BianChengNan2012-05-18 09:46
以下是引用lz1091914999在2012-5-14 10:30:57的发言:

#include  
#include  
#include  
#include  
using namespace std;
class SplitResult {
public:
    SplitResult(char** a = 0, int c = 0) : array(a), count(c) {}
    ~SplitResult();
    char** getArray() { return array; }
    int    getCount() { return count; }
private:
    char** array;
    int    count;
    friend SplitResult* split(const char*, SplitResult*);
};
SplitResult::~SplitResult()
{
    for (int i = 0; i < count; ++i)
        delete array;
    delete array;
}
SplitResult* split(const char*, SplitResult*);
int main()
{
    const char* str = "zhongyuan  da  jia  ting";
    SplitResult sr;
    int i;
 
    split(str, &sr);
    for (i = 0; i < sr.getCount(); ++i)
        cout << sr.getArray() << " ";
}
SplitResult* split(const char* str, SplitResult* sr)
{
    const char* p = str;
    const char* start;
    char** array;
    char* tmp;
    int length;
    int i;
    vector v;
 
    while (*p) {
        if (isalpha(*p)) {
            start = p;
            length = 0;
            while (isalpha(*p))
                ++p, ++length;
            tmp = new char[length + 1];
            tmp[length] = '\0';
            v.push_back(strncpy(tmp, start, length));
        }
        ++p;
    }
 
    array = new char*[v.size()];
    for (i = 0; i < v.size(); ++i)
        array = v;
    sr->array = array;
    sr->count = v.size();
 
    return sr;
}
c c++ 混合编程啊
1