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

一个非常非常非常简单的代码,但不知道为什么达不到效果

iyybpatrick 发布于 2015-10-15 21:49, 627 次点击
目标:想要从已获取的char*指针中获取空格前的部分,char *s="at station",获取char *t="at"  (这里后面不能有多余的空格)
问题:我提取好了保存在t里面了,但是和目标提取文件"at"不相同(strcmp显示为1),后来我用一个for循环发现at后面有很多空格,不过我new的空间不是只有2个么,会什么会出现多的空格呢?
代码如下:(请无视过多的头文件,我只是截取的部分代码出来)
#include<iostream>
#include<fstream>
#include<string>
#include <cstring>
#include<ctime>
#include<vector>
using namespace std;
int get_n(char*s)
{
    int i = 0;
    while (s[i] != ' ')
    {
        i++;
    }

    return i;
}
int main()
{
    char *s = "at train station";
    int k = get_n(s);
    char *t = new char[k];
    for (int i = 0; i < k; i++)
    {
        *(t + i) = *(s+i);
    }
    char *t1 = "at";
    cout << strcmp(t, t1);
    for (int m = 0; m < 4; m++){
        cout << *(t+m);
    }
    return 0;
}


求助啊,第一次发帖
8 回复
#2
yangfrancis2015-10-15 22:25
char *t = new char[k];
改成
char t[k];
 
一个字符串就一个指针
#3
iyybpatrick2015-10-15 23:06
回复 2楼 yangfrancis
最先我就想这样干的,他说“应输入常量表达式”
所以我迫不得已只有使用new char
#4
iyybpatrick2015-10-15 23:12
麻烦各位朋友帮帮忙呀,我卡这儿好久了,下周就要due了....还要赶着码代码~~
#5
hjx11202015-10-15 23:17
看楼主用了关键字new,
找半天没找到delete
#6
iyybpatrick2015-10-16 00:08
回复 5楼 hjx1120
请问new新建了就要delete么,会不会把整个char都delete了?(我是新手,请勿喷~%>_<%)
同时请问,如果我要达到预期效果的话,应该怎么修改呢?
#7
iyybpatrick2015-10-16 00:31
问题解决了,加上t[k]='\0';
#8
rjsp2015-10-16 08:19
以下是引用iyybpatrick在2015-10-16 00:31:43的发言:

问题解决了,加上t[k]='\0';
那么,你就不能 new char[k]; 而是得 new char[k+1];
BTW:你代码错误的地方特多,做法特别奇怪,奇怪得我都不知道怎么开口,要不你将题目贴出来看看。

#9
ITCD2015-10-16 19:29
C程序玩C++运算符不太好
1